Selenium无法获取PDF链接及下载文档问题求助
Selenium爬虫问题解决方案
一、添加--disable-http2参数解决HTTP2协议错误
直接在ChromeOptions中加入该参数即可,代码示例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 禁用HTTP2协议 chrome_options.add_argument("--disable-http2") # 可额外添加窗口最大化等配置 chrome_options.add_argument("--start-maximized") driver = webdriver.Chrome(options=chrome_options)
二、解决点击链接/获取href无效的问题
1. 用显式等待替代固定sleep
动态加载页面中,固定sleep无法保证元素完全渲染,显式等待会轮询到元素满足条件后再执行操作,稳定性更高:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 最长等待10秒,直到目标元素可点击 target_element = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "你的元素定位表达式")) ) # 执行点击操作 target_element.click() # 或获取href属性 href_value = target_element.get_attribute("href")
2. 检查元素是否在iframe内
如果目标链接嵌套在iframe中,必须先切换到iframe才能操作元素:
# 定位iframe(示例用id定位,可根据实际改为name/xpath等) iframe = driver.find_element(By.ID, "iframe_id") driver.switch_to.frame(iframe) # 在此处操作目标链接 target_link = driver.find_element(By.XPATH, "链接的xpath表达式") target_link.click() # 操作完成后切回主文档 driver.switch_to.default_content()
3. 隐藏Selenium自动化特征(规避反爬)
部分网站会检测自动化工具痕迹,添加以下参数模拟正常浏览器:
chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # 自定义User-Agent,模拟真实浏览器请求 chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
4. 优化元素定位方式
避免使用动态变化的class、绝对xpath等不稳定定位,改用更可靠的方式:
- 通过完整链接文本定位:
driver.find_element(By.LINK_TEXT, "目标链接完整文本") - 通过部分链接文本定位:
driver.find_element(By.PARTIAL_LINK_TEXT, "目标链接部分文本") - 通过包含特定href关键词的xpath定位:
driver.find_element(By.XPATH, "//a[contains(@href, '目标关键词')]")
内容的提问来源于stack exchange,提问作者Beez_arment
相关产品推荐
相关产品推荐

