【问题标题】:last problem when scraping bet365.com with selenium使用 selenium 抓取 bet365.com 时的最后一个问题
【发布时间】:2021-02-07 14:49:58
【问题描述】:

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

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')

在那之后,下一个作为解决方案工作: 用记事本++打开文件chromedriver.exe,搜索并用“xyz_”替换“cdc_”并保存文件。并将这一行添加到 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')

但是在执行页面后会卡住直到崩溃。

【问题讨论】:

    标签: python selenium selenium-webdriver web-scraping selenium-chromedriver


    【解决方案1】:
    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')
    

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

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

    【讨论】:

    • 我想我明白了,但我有一些问题。使用调试地址打开 chrome 是什么意思,你能解释一下怎么做吗?我想您的意思是,一旦您“使用调试地址”打开 chrome,请确保在运行上面的代码之前打开的唯一 chrome 选项卡是那个,不是吗?
    • @scraper 只需按原样运行代码,关闭所有 chrome 并运行代码,这将启动 chrome,并打开端口 9222 以进行调试。我们可以从 selenium chromedriver options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") 连接到这个地址
    • 我想知道 bet365 会为了获得多少机器人而更改他们的代码多少次。
    • @PDHide 有没有机会做同样的事情,但在隐身模式(隐私浏览)?因为当您使用 chrome 创建进程时,选项:# options.add_argument("--incognito") 不起作用。提前致谢。
    • @scraper 只需使用 subprocess.Popen( '"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" --remote-debugging-port=9222' - -incognito, shell=True)
    猜你喜欢
    • 2021-05-11
    • 2023-02-25
    • 1970-01-01
    • 2021-12-05
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多