gpt4 book ai didi

python - headless Chrome 驱动程序不适用于 Selenium

转载 作者:行者123 更新时间:2023-12-05 04:55:06 24 4
gpt4 key购买 nike

当我设置 options.add_argument("--headless") 时,我的爬虫目前遇到问题。但是,当它被移除时它工作得很好。谁能告诉我如何使用 headless 模式实现相同的结果?

下面是我的python代码:

from seleniumwire import webdriver as wireDriver
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.chrome.options import Options

chromedriverPath = '/Users/applepie/Desktop/chromedrivermac'

def scraper(search):

mit = "https://orbit-kb.mit.edu/hc/en-us/search?utf8=✓&query=" # Empty search on mit site
mit += "+".join(search) + "&commit=Search"
results = []

options = Options()
options.add_argument("--headless")
options.add_argument("--window-size=1440, 900")
driver = webdriver.Chrome(options=options, executable_path= chromedriverPath)

driver.get(mit)
# Wait 20 seconds for page to load
timeout = 20
try:
WebDriverWait(driver, timeout).until(EC.visibility_of_element_located((By.CLASS_NAME, "header")))
search_results = driver.find_element_by_class_name("search-results")
for result in search_results.find_elements_by_class_name("search-result"):
resultObject = {
"url": result.find_element_by_class_name('search-result-link').get_attribute("href")
}
results.append(resultObject)
driver.quit()
except TimeoutException:
print("Timed out waiting for page to load")
driver.quit()

return results

这也是我在 get() 之后 print(driver.page_source) 时的截图:

enter image description here

最佳答案

这个截图...

screenshot

...暗示 Cloudflare已检测到您对网站的请求是自动机器人,随后拒绝您访问该应用程序。


解决方案

在这些情况下,一个潜在的解决方案是使用 undetected-chromedriverheadless初始化 的模式浏览上下文。

undetected-chromedriver是一个优化的 Selenium Chromedriver 补丁,它不会触发像 Distill Network/Imperva/DataDome/Botprotect.io 这样的反机器人服务。它会自动下载驱动程序二进制文件并对其进行修补。

  • 代码块:

    import undetected_chromedriver as uc
    from selenium import webdriver

    options = webdriver.ChromeOptions()
    options.headless = True
    driver = uc.Chrome(options=options)
    driver.get(url)

引用资料

您可以在以下位置找到一些相关的详细讨论:

关于python - headless Chrome 驱动程序不适用于 Selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65585702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com