我想在 selenium 的帮助下用 python 创建一个自动化程序,打开一个网站,导航到我按下按钮并下载数据的部分。如果程序没有在后台运行,则它可以正常工作(那么我不使用
chrome_options.add_argument("--headless=old")
)。如果网站在后台运行,程序运行不会出错,但不会下载数据。我不认为
按下按钮。
我进行了以下 chrome 设置:
chrome_options = Options()
chrome_options.add_argument("--headless=old") # "--headless" or "--headless=new" can't work
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--log-level=3")
chrome_options.add_argument("--disable-extensions")
...
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get(""https://www.example.com"")
time.sleep(1)
按下按钮
...
button = driver.find_element(By.XPATH, '//*[@data-form-button="primary"]')
button.click()
或
button = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="dialog-region"]/form/div/footer/ul/li[2]/button')))
driver.execute_script("arguments[0].click();", button)
或
form = driver.find_element(By.XPATH, '//*[@id="dialog-region"]/form')
form.submit()
这行不通。
当我使用下一个 chrome 设置时:
chrome_options.add_argument("--headless")
或 chrome_options.add_argument("--headless=new")
然后会出现一个白色面板,直到我关闭程序。当我使用"--headless=old"
时,该程序仅在后台打开的情况下运行。我用它来按下按钮:
button = driver.find_element(By.XPATH, '//*[@data-form-button="primary"]')
button.click()
Chrome版本:129.0.6668.101
硒版本:4.25.0
操作系统:Windows 10
预先感谢您的帮助。
看起来下载在无头模式下不起作用,除非您在初始化驱动程序之前通过 Chrome 实验选项设置下载路径:请参阅此处的实现
话虽这么说,我个人会尝试使用 http requests 来做到这一点。那么你就不用担心Web自动化带来的麻烦了(页面不稳定、Selenium不稳定、每次下载驱动程序的时间等等)