Python undetectable_webdriver 不会循环打开
Python undetectable_webdriver won't open in a loop
我试图在一个循环中多次打开一个站点,以测试不同的凭据是否已过期,以便我可以通知我们的用户。我通过打开数据库、获取记录、调用 chrome 驱动程序打开网站并将值输入网站来实现这一点。第一个循环有效,但当下一个循环启动时,驱动程序挂起并最终输出错误:
"unknown error: cannot connect to chrome at 127.0.0.1:XXXX from chrome not reachable"
当已经有一个实例 运行 时,通常会发生此错误。当第一个循环完成但无济于事时,我试图通过使用 driver.close() 和 driver.quit() 来防止这种情况。我已经处理了所有其他检测的可能性,例如使用代理、不同的用户代理,以及使用 https://github.com/ultrafunkamsterdam/undetected-chromedriver 的 undetected_chromedriver。
我要解决的核心问题是能够打开 chrome 驱动程序的一个实例,关闭它并在同一个执行循环中再次打开它,直到我正在测试的所有凭据都有完成的。我提取了代码并提供了一个独立版本来复制问题:
# INSTALL CHROMDRIVER USING "pip install undetected-chromedriver"
import undetected_chromedriver.v2 as uc
# Python Libraries
import time
options = uc.ChromeOptions()
options.add_argument('--no-first-run')
driver = uc.Chrome(options=options)
length = 8
count = 0
if count < length:
print("Im outside the loop")
while count < length:
print("This is loop ",count)
time.sleep(2)
with driver:
print("Im inside the loop")
count =+ 1
driver.get("https://google.com")
time.sleep(5)
print("Im at the end of the loop")
driver.quit() # Used to exit the browser, and end the session
# driver.close() # Only closes the window in focus
我建议使用 python virtualenv 来保持包的一致性。我在 Linux 机器上使用 python3.9。任何解决方案、建议或变通方法将不胜感激。
你在循环中退出你的驱动程序,然后试图访问不再存在的执行程序地址,因此你的错误。您需要通过在循环中向下移动驱动程序来重新初始化驱动程序,在 while 语句之前。
from multiprocessing import Process, freeze_support
import undetected_chromedriver as uc
# Python Libraries
import time
chroptions = uc.ChromeOptions()
chroptions.add_argument('--no-first-run enable_console_log = True')
# driver = uc.Chrome(options=chroptions)
length = 8
count = 0
if count < length:
print("Im outside the loop")
while count < length:
print("This is loop ",count)
driver = uc.Chrome(options=chroptions)
time.sleep(2)
with driver:
print("Im inside the loop")
count =+ 1
driver.get("https://google.com")
print("Session ID: ", end='') #added to show your session ID is changing
print(driver.session_id)
driver.quit()
我试图在一个循环中多次打开一个站点,以测试不同的凭据是否已过期,以便我可以通知我们的用户。我通过打开数据库、获取记录、调用 chrome 驱动程序打开网站并将值输入网站来实现这一点。第一个循环有效,但当下一个循环启动时,驱动程序挂起并最终输出错误:
"unknown error: cannot connect to chrome at 127.0.0.1:XXXX from chrome not reachable"
当已经有一个实例 运行 时,通常会发生此错误。当第一个循环完成但无济于事时,我试图通过使用 driver.close() 和 driver.quit() 来防止这种情况。我已经处理了所有其他检测的可能性,例如使用代理、不同的用户代理,以及使用 https://github.com/ultrafunkamsterdam/undetected-chromedriver 的 undetected_chromedriver。
我要解决的核心问题是能够打开 chrome 驱动程序的一个实例,关闭它并在同一个执行循环中再次打开它,直到我正在测试的所有凭据都有完成的。我提取了代码并提供了一个独立版本来复制问题:
# INSTALL CHROMDRIVER USING "pip install undetected-chromedriver"
import undetected_chromedriver.v2 as uc
# Python Libraries
import time
options = uc.ChromeOptions()
options.add_argument('--no-first-run')
driver = uc.Chrome(options=options)
length = 8
count = 0
if count < length:
print("Im outside the loop")
while count < length:
print("This is loop ",count)
time.sleep(2)
with driver:
print("Im inside the loop")
count =+ 1
driver.get("https://google.com")
time.sleep(5)
print("Im at the end of the loop")
driver.quit() # Used to exit the browser, and end the session
# driver.close() # Only closes the window in focus
我建议使用 python virtualenv 来保持包的一致性。我在 Linux 机器上使用 python3.9。任何解决方案、建议或变通方法将不胜感激。
你在循环中退出你的驱动程序,然后试图访问不再存在的执行程序地址,因此你的错误。您需要通过在循环中向下移动驱动程序来重新初始化驱动程序,在 while 语句之前。
from multiprocessing import Process, freeze_support
import undetected_chromedriver as uc
# Python Libraries
import time
chroptions = uc.ChromeOptions()
chroptions.add_argument('--no-first-run enable_console_log = True')
# driver = uc.Chrome(options=chroptions)
length = 8
count = 0
if count < length:
print("Im outside the loop")
while count < length:
print("This is loop ",count)
driver = uc.Chrome(options=chroptions)
time.sleep(2)
with driver:
print("Im inside the loop")
count =+ 1
driver.get("https://google.com")
print("Session ID: ", end='') #added to show your session ID is changing
print(driver.session_id)
driver.quit()