使用 selenium 抓取 bet365.com 时出现的最后一个问题

scr*_*per 2 python selenium web-scraping selenium-chromedriver selenium-webdriver

在社区查找信息后,我在帖子中看到下一个代码直到几天前才起作用:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("window-size=1920,1080")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
browser=webdriver.Chrome(options=options,executable_path=r"chromedriver.exe")

browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
                                  "source": """
                                    Object.defineProperty(navigator, 'webdriver', {
                                      get: () => undefined
                                    })
                                  """
                                })
browser.execute_cdp_cmd('Network.setUserAgentOverride', 
                                    {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4240.198 Safari/537.36'})
browser.get('https://www.bet365.com')
Run Code Online (Sandbox Code Playgroud)

之后,下一个解决方案是:用 Notepad ++ 打开文件 chromedriver.exe 并搜索并将“cdc_”替换为“xyz_”并保存文件。并将此行添加到 chromedriver 的选项中: options.add_argument('--disable-blink-features=AutomationControlled')

我不知道为什么这对我不起作用。我正在使用 Chrome 88.0.4324.146 和 chromedriver 版本 88.0.4324.96,并执行以下代码:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("window-size=1920,1080")
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
browser=webdriver.Chrome(options=options,executable_path=r"chromedriver.exe")

browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
                                  "source": """
                                    Object.defineProperty(navigator, 'webdriver', {
                                      get: () => undefined
                                    })
                                  """
                                })
browser.execute_cdp_cmd('Network.setUserAgentOverride', 
                                    {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4240.198 Safari/537.36'})
browser.get('https://www.bet365.com')
Run Code Online (Sandbox Code Playgroud)

但执行后页面会卡住加载直至崩溃。

PDH*_*ide 5

import subprocess
#other imports

subprocess.Popen(
   '"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --remote-debugging-port=9222', shell=True)
   
options = webdriver.ChromeOptions()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

driver = webdriver.Chrome(options=options)
driver.maximize_window()
driver.get('https://www.bet365.com')
Run Code Online (Sandbox Code Playgroud)

看来该网站以某种方式检测自动化,解决方法是使用调试地址打开 chrome,然后使用上面的代码将 selenium 连接到此。根据您的环境更改chrome.exe

注意:运行此脚本之前请确保关闭所有 chrome 浏览器