【问题标题】:using multiple accounts and selenium+requests instance at once一次使用多个帐户和 selenium+requests 实例
【发布时间】:2019-03-12 00:44:27
【问题描述】:
from selenium import webdriver
import requests


driver = webdriver.Chrome()

#login to website using selenium and get cookies

cookievar = driver.get_cookies()


#send requests using cookies scraped from selenium webdriver

r = post(url, formData, headers=headers0, proxies=proxies, verify=False)

我的代码适用于一个帐户,但现在我希望它能够与多个帐户一起使用,此脚本一次仅适用于 1 个帐户我试图获得的是同时运行 3-4 个帐户使用 webdriver 和请求

谁能帮忙?欢迎提出建议 谢谢

【问题讨论】:

  • 你可以看this,如果你只用selenium来获取cookie,我觉得很好。
  • 是否可以使用同一个 webdriver 对象运行多个进程并获取不同的帐户 cookie?
  • 不,你只有一个 webdriver ,不能并行工作。而且打开多个 webdriver 也不是很好的选择。但是多个requests.session 很棒
  • 那么我如何使用一个 webdriver 登录到不同的帐户? atm 我只能使用 1 个 webdriver = 1 个帐户
  • 清除cookies并再次登录,how to clear cookies,然后你需要一个字典来保存不同的cookies

标签: python python-3.x selenium python-requests subprocess


【解决方案1】:

这是我在评论时的想法,但这只是一个演示。除了multiprocessingthreading,你还可以试试concurrent.futures

from selenium import webdriver
import requests
from multiprocessing import Pool

driver = webdriver.Chrome()
clist = {}
#login to website using selenium and get cookies

def relogin(user,pwd):
    ...
    cookievar = driver.get_cookies()
    clist[user] = cookievar
    ...
    driver.delete_all_cookies()

userlist = [("userA","pwdA"),("userB","pwdB")]

for user,pwd in userlist:
    relogin(user,pwd)

driver.close()

#send requests using cookies scraped from selenium webdriver
def post_data(url,formData,proxies,headers = headers0):
    r = post(url, formData, headers=headers, proxies=proxies, verify=False)
    ...

def start(number=len(userlist)):
    p = Pool(number)
    result = p.map_async(post_data , [(url,formData,proxies),
                            (url2,formData2,proxies2,headers2)])
    print(result.get())

if __name__ == '__main__':
    start()

【讨论】:

  • 使用这个会同时提交2个请求还是等待一个请求完成然后执行另一个?我希望它同时提交多个请求以获取您的答案
  • 同时提交2个请求,但只有完成后才能得到结果。所以我建议添加一个Queue 来放置结果或使用ProcessPoolExecutor 其中concurrent.futures,@elrichbachman
  • 你能推荐这方面的教程或指南吗?我希望能够同时使用 100 个帐户并发送 100 个请求,这可能吗?
  • 100 个请求,我更喜欢 from concurrent.futures import ThreadPoolExecutor,因为它可以同时发送它们并在完成时获得每个结果(100 个进程将比线程浪费更多的内存)。但我认为你需要为 cookie 建立几个 webdriver,多个线程或进程都可以做到这一点@elrichbachman
  • 作为我在 SO 上的名字。我认为它不会有第二个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多