如何在线程期间关闭Web浏览器,以及如何在Python Selenium Firefox中设置线程计时器?

agyaoht7  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(114)

当线程循环时,我如何关闭浏览器并重新打开它?有没有更简单的方法来编写此代码?也有没有方法来设置一个计时器,我希望所有这些运行多长时间?我试图设置另一个循环作为外部循环,但它只是不断打开更多的Web浏览器。有没有方法来合并多处理和集成VPN交换机在其中?

import random
import threading
import time
from selenium import webdriver
from selenium.webdriver.firefox.service import Service

driver_service = Service(executable_path="C:\\Program Files\\geckodriver.exe")
count = 5

def get_it(driver):
    while True:
        driver.get('https://www.youtube.com')
        time.sleep(random.randint(5, 10))
for x in range(2):
    for i in range(count):
        browserThread = threading.Thread(target=get_it, args=(webdriver.Firefox(),))
        browserThread.start()

我已经尝试了从driver.quit()driver.close()的所有方法,它会停止我的线程运行并导致错误。
对于线程上的循环,我尝试了一个外部循环,但没有成功,它只是不断打开Web浏览器比我设置的更多。

myzjeezk

myzjeezk1#

我所做的是在函数内部创建***驱动程序***。它允许你根据需要重新打开和关闭浏览器。我不得不删除while循环,因为我不明白你为什么需要它。线程处理取决于你的机器资源。所以创建一个双for循环来使用线程不会给予性能优势。所以我坚持使用一个。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
import random
import threading

count = 10

def get_it():
    driver = webdriver.Chrome(ChromeDriverManager().install())  #chrome always to easily maintain the driver.
    # Use proxy to configure different IP.# 
    driver.get('https://www.youtube.com')
    time.sleep(random.randint(5, 10))
    driver.quit()
  

for i in range(count):
    browserThread = threading.Thread(target=get_it)
    browserThread.start()

如果你在函数作用域中声明了 driver,它将创建一个新的浏览器示例并运行你的代码。根据我的经验,线程中浏览器关闭错误的原因是函数作用域。你应该完美地设置作用域,然后你就可以开始了。
对于VPN,你可以在selenium中使用代理。你会发现一些在代码中集成它们的解决方案。

相关问题