首页 > 解决方案 > 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

标签: pythonpython-3.xseleniumgoogle-chromeselenium-webdriver

解决方案


您正在向 chromedriver 添加扩展,options.add_extension(CRXPATH)这对于无头浏览器来说是不可能的。

您可以删除扩展程序并保留无头浏览器,也可以删除无头浏览器以使用扩展程序。


推荐阅读