python - 使用多线程同时打开 2 个 Webdriver
问题描述
我正在使用Selenium
and进行 Crawl 项目Webdriver
。由于我需要在大时抓取该数据,因此我想将其拆分为 2threads
并同时运行。但是当我Webdrivers
同时启动2时,我的代码无法识别哪个driver
属于哪个thread
来填充信息。
- 这是我设置 2
threads
运行main
功能的代码:
if __name__ == '__main__':
data = load_data(INPUT_DIR)
t1_data = data[:250]
t2_data = data[250:]
try:
_thread.start_new_thread(main, (t1_data, LOG_FILE_T1))
_thread.start_new_thread(main, (t2_data, LOG_FILE_T2))
except:
print ("Error: unable to start thread")
while 1:
pass
- 这段代码我开始
Webdriver
:
def start_driver():
global driver
options = Options()
options.add_argument("--disable-notification")
options.add_argument("--disable-infobars")
options.add_argument("--mute-audio")
#options.add_argument("headless")
driver = webdriver.Chrome(options=options)
- 两个
Webdrivers
启动后,我会在facebook.com上填写用户名/密码信息
def login(email, password):
""" Logging into our own profile """
try:
driver.get('https://mbasic.facebook.com')
time.sleep(DELAY_TIME)
driver.find_element_by_name('email').send_keys(email)
driver.find_element_by_name('pass').send_keys(password)
driver.find_element_by_name('login').click()
# deal with "Not Now" button if it show off at first time
not_now_button = driver.find_element_by_xpath("//a")
if not_now_button.size != 0:
not_now_button.click()
except Exception as e:
print('Error in Login')
print(e)
exit()
在send_keys
步骤中,两者都threads
在 1 中填写相同的文本框Webdriver
。如何更改我的代码 2threads
可以看到不同Webdrive
并填写信息?
解决方案
刚刚找到解决方案,如果有人需要,我想在这里分享。
而不是global driver
,我将更改为本地driver
并将其传递给每个function
。
def start_driver():
options = Options()
options.add_argument("--disable-notification")
options.add_argument("--disable-infobars")
options.add_argument("--mute-audio")
#options.add_argument("headless")
driver = webdriver.Chrome(options=options)
return driver
def login(driver, email, password):
""" Logging into our own profile """
try:
driver.get('https://mbasic.facebook.com')
time.sleep(DELAY_TIME)
driver.find_element_by_name('email').send_keys(email)
driver.find_element_by_name('pass').send_keys(password)
driver.find_element_by_name('login').click()
# deal with "Not Now" button if it show off at first time
not_now_button = driver.find_element_by_xpath("//a")
if not_now_button.size != 0:
not_now_button.click()
except Exception as e:
print('Error in Login')
print(e)
exit()
这样,2人threads
就可以看到不同Webdriver
的信息并填写自己的信息。
推荐阅读
- swift - 为什么我的 SwiftUI Grid 不适应可用空间?
- c# - 如何确定哪个键触发了 RoutedCommand 事件
- spring-cloud-gateway - 每次请求都会调用 Resilience4j 断路器回退
- node.js - npm 错误!cb.apply 不是函数(基本操作系统)
- c# - C# 多线程调用数据网格的更新 GUI 无法正常工作
- javascript - 我需要使用 React Navigation 5 在顶部选项卡导航中显示所选选项卡的名称
- excel - Excel VBA 模块在整列中插入公式,而不是在行中插入单个单元格
- vbscript - .vbs 文件,系统找不到路径
- linq - 如何获取具有特定 Id 和 LastDate 的所有记录
- java - java.net.ConnectException:连接被拒绝(连接被拒绝):Docker + Spring boot