selenium 驱动chrome抓取一个网站数据,有cloudflare的人机校验;浏览器打开后不关闭,人机校验通过后,页面跳转到了目标页面。但是chrome.pagesource获取不到目标页面内容,得到的还是人机校验界面的内容。
我的代码:
options = webdriver.ChromeOptions()
# 设置参数
# 浏览器打开不关
options.add_experimental_option("detach", True)
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
chrome = webdriver.Chrome(options=options)
chrome.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
# 这里的操作大概就是把控制台中的window.navigator.webdriver =undefined 赋值 因为人机操作会认为是Ture
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
chrome.get(source_url)
time.sleep(5) # 这里可能需要根据实际情况调整等待时间
iframe_element = chrome.find_element(By.XPATH,"//iframe[@title='包含 Cloudflare 安全质询的小组件 ']")
# 切换到iframe中
chrome.switch_to.frame(iframe_element)
click_element = chrome.find_element(By.CSS_SELECTOR, "input[type='checkbox']")
actions = ActionChains(chrome)
actions.move_to_element(click_element).perform()
actions.click(click_element).perform()
WebDriverWait(chrome, 20).until_not(EC.presence_of_element_located((By.XPATH, "//iframe[@title='包含 Cloudflare 安全质询的小组件 ']")))
chrome.switch_to.default_content()
WebDriverWait(chrome, 60).until(expected_conditions.url_contains('munpia.com'))
print(chrome.page_source)