【问题标题】:Windows Python Selenium Webdriver can only run in headless Chrome and not in Chrome with UIWindows Python Selenium Webdriver 只能在无头 Chrome 中运行,不能在带有 UI 的 Chrome 中运行
【发布时间】:2020-03-28 17:16:05
【问题描述】:

我在带有 UI 的普通 Chrome 中运行 Selenium 时遇到问题,但该代码适用于 headless chrome。它适用于使用普通 Chrome 的 Mac 用户。 我收到以下错误代码:

Traceback (most recent call last):
  File "privacy-api-backend/website-functions/acxiom.py", line 56, in <module>
    acxiom_DD_formfill(title, firstname, middlename, lastname, suffix, email)
  File "privacy-api-backend/website-functions/acxiom.py", line 20, in acxiom_DD_formfill
    driver = webdriver.Chrome()
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in _init_
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in _init_
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/chromium-browser is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

当我不运行此处注释掉的 Chrome 选项时:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import os
import time
def acxiom_DD_formfill(title, firstname, middlename, lastname, suffix, email):
    # chrome_options = Options()
    # chrome_options.add_argument('--no-sandbox')
    # chrome_options.add_argument('--headless')
    # chrome_options.add_argument('--disable-dev-shm-usage')
    # chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
    # chrome_options.add_experimental_option('useAutomationExtension', False)
    # driver = webdriver.Chrome(options=chrome_options)
    driver = webdriver.Chrome()
    driver.set_page_load_timeout(10)
    driver.set_window_size(1124, 850) # set browser size
    # link to data delete form
    print("opening data delete form")
    driver.get("https://isapps.acxiom.com/optout/optout.aspx#section8")
    #Select opt out segment: Following option values: "Mail", "Telemarketing", "Email"
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.ss-values"))).click()
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.ss-values"))).click()
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='ss-option' and contains(.,'Email')]"))).click()
    #ele = driver.find_element_by_xpath("//select[@id='OptOutChoices2']/option[@value='Mail']") 
    #driver.execute_script("arguments[0].click()",ele)
    print("dropdown selected")
    #Select identity: Following option values: "Myself", "Legal guardian", "Deceased person"
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//select[@id='Identity']/option[contains(text(),'Who is opting out?')]"))).click();
    #Select title: Following option values: "Mr.", "Mrs.", "Ms.", "Dr.", "Honorable", "Reverend", "Other"
    ele3 = driver.find_element_by_xpath("//select[@id='Title']/option[@value='Mr.']") 
    driver.execute_script("arguments[0].click()",ele3)
    driver.find_element_by_id("FirstName").send_keys(firstname) 
    driver.find_element_by_id("MiddleName").send_keys(middlename)
    driver.find_element_by_id("LastName").send_keys(lastname)
    driver.find_element_by_id("DDSuffix").send_keys(suffix) 
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "Email")))
    #driver.find_element_by_id("Email").send_keys(email) 
    # KEEP THIS DISABLED BC IT ACTUALLY SUBMITS 
    # driver.find_element_by_id("SubmitButton2").send_keys(Keys.ENTER)
    print("executed")
    time.sleep(4)
    driver.quit()
    return None
title="Mr"
middlename=""
firstname = "Joe"
lastname = "Musterman"
suffix=""
email = "joe@musterman.com"
acxiom_DD_formfill(title, firstname, middlename, lastname, suffix, email)

您能帮我解释一下为什么我不能在普通的 Chrome 浏览器中运行它吗?我已经做了很多 Stack Overflow 研究。 谢谢!

【问题讨论】:

    标签: python-3.x selenium google-chrome


    【解决方案1】:

    请参考以下解决方案并添加 chrome 可执行路径。检查您的 chrome 浏览器版本并从以下链接下载 chrome 驱动程序: https://chromedriver.chromium.org/downloads

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import Select
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    import os
    import time
    def acxiom_DD_formfill(title, firstname, middlename, lastname, suffix, email):
        # chrome_options = Options()
        # chrome_options.add_argument('--no-sandbox')
        # chrome_options.add_argument('--headless')
        # chrome_options.add_argument('--disable-dev-shm-usage')
        # chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
        # chrome_options.add_experimental_option('useAutomationExtension', False)
        # driver = webdriver.Chrome(options=chrome_options)
        driver = webdriver.Chrome(executable_path=r"chromedriver.exe")
        driver.set_page_load_timeout(10)
        driver.set_window_size(1124, 850) # set browser size
        # link to data delete form
        print("opening data delete form")
        driver.get("https://isapps.acxiom.com/optout/optout.aspx#section8")
        #Select opt out segment: Following option values: "Mail", "Telemarketing", "Email"
        WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.ss-values"))).click()
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.ss-values"))).click()
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='ss-option' and contains(.,'Email')]"))).click()
        #ele = driver.find_element_by_xpath("//select[@id='OptOutChoices2']/option[@value='Mail']") 
        #driver.execute_script("arguments[0].click()",ele)
        print("dropdown selected")
        #Select identity: Following option values: "Myself", "Legal guardian", "Deceased person"
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//select[@id='Identity']/option[contains(text(),'Who is opting out?')]"))).click();
        #Select title: Following option values: "Mr.", "Mrs.", "Ms.", "Dr.", "Honorable", "Reverend", "Other"
        ele3 = driver.find_element_by_xpath("//select[@id='Title']/option[@value='Mr.']") 
        driver.execute_script("arguments[0].click()",ele3)
        driver.find_element_by_id("FirstName").send_keys(firstname) 
        driver.find_element_by_id("MiddleName").send_keys(middlename)
        driver.find_element_by_id("LastName").send_keys(lastname)
        driver.find_element_by_id("DDSuffix").send_keys(suffix) 
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "Email")))
        #driver.find_element_by_id("Email").send_keys(email) 
        # KEEP THIS DISABLED BC IT ACTUALLY SUBMITS 
        # driver.find_element_by_id("SubmitButton2").send_keys(Keys.ENTER)
        print("executed")
        time.sleep(4)
        driver.quit()
        return None
    title="Mr"
    middlename=""
    firstname = "Joe"
    lastname = "Musterman"
    suffix=""
    email = "joe@musterman.com"
    acxiom_DD_formfill(title, firstname, middlename, lastname, suffix, email)
    

    输出:

    【讨论】:

    • 不幸的是,这不起作用。我将正确的 chromedriver 复制到与程序相同的文件夹中,并使用 driver = webdriver.Chrome(executable_path=r"chromedriver.exe") 运行它。这导致了相同的错误消息
    • 我用的是windows机器,mac你能把你的chrome驱动保存在/usr/bin/下,更新路径是相应的代码。
    • 我也用 Windows
    • 请提供您的驱动程序 = webdriver.Chrome(executable_path=r"chromedriver.exe")
    • 我下载了ChromeDriver 80.0.3987.106,和程序放在同一个文件夹里:driver = webdriver.Chrome(executable_path=r"chromedriver.exe")
    猜你喜欢
    • 2012-01-05
    • 2014-01-16
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多