使用Selenium4+Chrome Webdriver登录Twitter无法审查元素求助
解决方案
1. 绕过Selenium指纹检测
Twitter跳转到https://twitter.com/i/flow/login页面的核心原因是检测到了Selenium启动的浏览器特征,首先修改Chrome启动配置消除特征:
- 启动时添加
--disable-blink-features=AutomationControlled参数,移除浏览器的自动化控制标记 - 排除
enable-automation开关,关闭自动化扩展,避免被特征识别 - 启动时添加
--start-maximized参数,避免窗口尺寸异常触发反爬规则 - 通过CDP命令修改
navigator.webdriver属性为undefined,覆盖Selenium默认的true值
示例配置代码:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager options = webdriver.ChromeOptions() # 核心反爬配置 options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) options.add_argument("--start-maximized") driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) # 页面加载前覆盖webdriver属性 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ })
完成上述配置后,大概率可以直接访问常规登录页,不会触发跳转。
2. 绕过元素审查限制
右键触发重定向是因为Twitter监听了右键事件做反爬,不用右键审查即可规避:
- 直接按F12打开开发者工具,点击左上角的元素选择箭头,再点击对应的输入框即可定位元素,不会触发重定向
3. 流程登录代码示例
如果依然跳转到flow/login页面,可直接用固定属性定位元素,不需要手动审查:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wait = WebDriverWait(driver, 10) # 输入用户名 username_input = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@autocomplete="username"]'))) username_input.send_keys("你的Twitter用户名") # 点击下一步按钮(英文界面将“下一步”替换为“Next”) driver.find_element(By.XPATH, '//span[text()="下一步"]/ancestor::button').click() # 输入密码 password_input = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@autocomplete="current-password"]'))) password_input.send_keys("你的Twitter密码") # 点击登录按钮(英文界面将“登录”替换为“Log in”) driver.find_element(By.XPATH, '//span[text()="登录"]/ancestor::button').click()
4. 备用方案
如果上述配置依然被检测,可直接使用undetected-chromedriver库,该库对ChromeDriver做了特征抹除,兼容原生Selenium语法,绕过绝大多数反爬检测:
安装命令:pip install undetected-chromedriver
使用示例:
import undetected_chromedriver as uc driver = uc.Chrome() driver.get("https://twitter.com/login") # 后续登录逻辑和上述代码一致
内容的提问来源于stack exchange,提问作者Maryam Nasseri
相关产品推荐
相关产品推荐

