您如何将无头 Chrome 与 Selenium 一起使用?

Posted

技术标签:

【中文标题】您如何将无头 Chrome 与 Selenium 一起使用?【英文标题】:How do you use headless Chrome with Selenium? 【发布时间】:2022-01-22 05:41:42 【问题描述】:

问这个问题是因为我想知道在 2021 年做这件事的最佳方式是什么,因为已经发生了变化,而且我看到人们的做法有所不同。

我希望能够使用无头在后台自动化我的 Twitter 关注机器人。我也是 Python 新手,还在学习,所以我很感激代码行。

代码:

import tkinter as tk

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.chrome.service import Service

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("start-maximized")

ser = Service("C:\Program Files (x86)\chromedriver.exe")

import time

from time import sleep

root = tk.Tk()

app_width = 300
app_height = 320

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

x = (screen_width / 2) - (app_width / 2)
y = (screen_height / 2) - (app_height / 2)

root.geometry(f'app_widthxapp_height+int(x)+int(y)')

testbtn_txt = tk.StringVar()
testbtn = tk.Button(root, textvariable=testbtn_txt, command=lambda:open_browser_func(), font="Arial", bg="#808080", fg="white", height=1, width=10)
testbtn_txt.set("Test")
testbtn.grid(row=10, column=0, columnspan=2, pady=5, padx=5)


def open_browser_func():
    global driver
    
    driver = webdriver.Chrome(service=ser, options=options)

    driver.get("https://twitter.com/i/flow/login")
    sleep(5)

    wait = WebDriverWait(driver, 30)
    loginuser  = wait.until(EC.visibility_of_element_located((By.NAME, "text")))
    loginuser.send_keys("User", Keys.RETURN)
    loginPassword = wait.until(EC.visibility_of_element_located((By.NAME, "password")))
    loginPassword.send_keys("Pass", Keys.RETURN)
    
    sleep(10)
    driver.get_screenshot_as_file("logged_in_shot.png")
    return driver

root.mainloop()

【问题讨论】:

请分享您的实际代码,我会尝试在那里添加无头选项。否则,您的问题将缺少细节、重点和调试...... 对不起。立即编辑帖子。 这是正确的options = webdriver.ChromeOptions() options.add_argument("--headless"),但请记住,无头在 GUI 模式下不稳定。 你是什么意思? 【参考方案1】:

一般来说,您的代码几乎是正确的。 然而,而不是

options.add_argument("start-maximized")

应该是这样的

options.add_argument("--start-maximized")

另外我认为最好明确设置窗口大小,比如

options.add_argument("--window-size=1920,1080")

而不是

options.add_argument("--start-maximized")

【讨论】:

以上是关于您如何将无头 Chrome 与 Selenium 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 selenium 中使用无头 Chrome 启用 JavaScript

无头 Chrome 驱动程序不适用于 Selenium

如何使用无头镀铬在 Selenium 中启用闪存

如何使用 Java 和 Selenium 为我的驱动程序传递无头选项?

Python-Selenium:Chrome 无头设置不适用于“WebDriverWait”

Selenium-Selenium配置无头浏览器+规避检测