python - selenium 在添加 --headless 选项时给出未知错误
问题描述
所以我有这个向bing.com发出请求的代码,但问题是我需要在heroku上部署它但是当我添加运行selenium所需的--headless参数时,我得到一个必须做的奇怪错误使用我正在加载的扩展程序,它无法加载扩展程序的背景页面该扩展程序基本上完成了一半的工作,也可以手动完成,这需要几天才能实现这里是代码:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from data import *
from time import sleep
def main(mail: str, password: str):
options = Options()
options.add_extension(CRXPATH)
options.add_argument(EDGE)
options.add_argument("--headless")
driver = webdriver.Chrome(executable_path=driverpath, options=options)
driver.get(URL)
#login
# wait for email field and enter email
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(EMAILFIELD)).send_keys(mail)
# Click Next
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(NEXTBUTTON)).click()
# wait for password field and enter password
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(PASSWORDFIELD)).send_keys(password)
# Click Login
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(NEXTBUTTON)).click()
# Click NO
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(NO)).click()
sleep(5)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(ACCEDI)).click()
sleep(5)
driver.get(REWARDS)
sleep(5)
#Missions
for i in range(1,4):
while True:
try:
driver.find_element_by_xpath(MISSIONS.format(i)).click()
break
except Exception:
driver.refresh()
sleep(10)
driver.switch_to.window(driver.window_handles[-1])
sleep(45)
for i in range(len(driver.window_handles)-1):
driver.close()
sleep(0.5)
driver.switch_to.window(driver.window_handles[-1])
sleep(5)
for i in range(41):
word = random.choice(words)
driver.get(BING.format(word))
sleep(3)
driver.quit()
Moptions = Options()
Moptions.add_experimental_option("mobileEmulation", mobile_emulation)
Moptions.add_argument("--headless")
mobile = webdriver.Chrome(executable_path=driverpath, options=Moptions)
mobile.get(URL)
sleep(5)
#login
# wait for email field and enter email
WebDriverWait(mobile, 20).until(EC.element_to_be_clickable(EMAILFIELD)).send_keys(mail)
# Click Next
WebDriverWait(mobile, 20).until(EC.element_to_be_clickable(NEXTBUTTON)).click()
# wait for password field and enter password
WebDriverWait(mobile, 20).until(EC.element_to_be_clickable(PASSWORDFIELD)).send_keys(password)
# Click Login
WebDriverWait(mobile, 20).until(EC.element_to_be_clickable(NEXTBUTTON)).click()
# Click NO
WebDriverWait(mobile, 20).until(EC.element_to_be_clickable(NO)).click()
sleep(5)
#i0116
WebDriverWait(mobile, 20).until(EC.element_to_be_clickable(ACCEDI_)).click()
WebDriverWait(mobile, 20).until(EC.element_to_be_clickable(ACCEDI__)).click()
sleep(10)
mobile.get("https://bing.com")
for i in range(41):
word = random.choice(words)
mobile.get(BING.format(word))
sleep(3)
mobile.quit()
这是错误:
File "C:\Projects\Python\msrtest\main.py", line 130, in <module>
main("daniele.collanicchia@gmail.com", "MiaoMiao123")
File "C:\Projects\Python\msrtest\main.py", line 22, in main
driver = webdriver.Chrome(executable_path=driverpath, options=options)
File "C:\Users\\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 76, in __init__
RemoteWebDriver.__init__(
File "C:\Users\\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "C:\Users\\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Users\\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: failed to wait for extension background page to load: chrome-extension://id/_generated_background_page.html
from unknown error: page could not be found: chrome-extension://id/_generated_background_page.html
解决方案
您正在向 chromedriver 添加扩展,options.add_extension(CRXPATH)
这对于无头浏览器来说是不可能的。
您可以删除扩展程序并保留无头浏览器,也可以删除无头浏览器以使用扩展程序。
推荐阅读
- java - 为什么在对结果求和之前需要左移?
- javascript - html2canvas 停止滚动到页面顶部
- eclipse - SFTP 传输后 Eclipse 无法正确编译 SWT 文件
- visual-studio-2015 - Visual Studio 2019 - TFS 查询 - 每个团队项目/团队缺少查询列表
- python-3.x - 如何在使用 python 的同一语句中使用 AND 和 OR 查询/扫描 DynamoDB 中的表?
- c# - 是否可以从字符串输入中调用变量
- reactjs - React-Native:将本地图像转换为 base64 字符串
- java - 使用一个按钮从多个面板中提取信息
- javascript - 我什么时候可以在android webview中自动调用注入的javascript函数
- javascript - 为什么redux Reducer中的状态变量不增加1