使用Selenium抓取javascript网站,其中页面在多个浏览器中随机加载失败

2024-09-26 22:51:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带selenium的python刮板,用于抓取动态加载的javascript网站。
刮板本身工作正常,但页面有时无法加载,出现404错误
问题是,公共http并没有我需要的数据,但每次都会加载,而带有我需要的数据的javascript http有时在随机时间内不会加载。
更奇怪的是,相同的javascript http加载在一个浏览器中,但不加载在另一个浏览器中,反之亦然。
我试过chrome、firefox、firefox开发者版和opera的webdriver。没有一个用户每次都加载所有页面。
没有我需要的数据的公共链接如下:<https://www.sazka.cz/kurzove-sazky/fotbal/*League*/>
包含我需要的数据的Javascript链接如下<https://rsb.sazka.cz/fotbal/*League*/>
平均约30个链接中,约有8个无法加载,尽管在不同的浏览器中,同一个链接在同一时间可以完美加载。
我试图在页面源中搜索一些线索,但什么也没找到。
有人能帮我找出哪里可能有问题吗?多谢各位

编辑:这是我认为相关的代码

Edit2:你可以通过右键点击某个联盟并尝试打开另一个选项卡中的链接来重现这个问题。然后可以看到,即使在新选项卡中打开该页面后,该页面第一次正确加载,它也会将http链接的开始从https://www.sazka.cz更改为https://rsb.sazka.cz,有时会出现404错误,可能持续一个小时或更长时间

driver = webdriver.Chrome(executable_path='chromedriver', 
                               service_args=['--ssl-protocol=any', 
                               '--ignore-ssl-errors=true'])
driver.maximize_window()
for single_url in urls:   
    randomLoadTime = random.randint(400, 600)/100
    time.sleep(randomLoadTime)
    driver1 = driver
    driver1.get(single_url)  
    htmlSourceRedirectCheck = driver1.page_source

    # Redirect Check
    redirectCheck = re.findall('404 - Page not found', htmlSourceRedirectCheck)

    if '404 - Page not found' in redirectCheck:
        leaguer1 = single_url
        leagueFinal = re.findall('fotbal/(.*?)/', leaguer1)
        print(str(leagueFinal) + ' ' + '404 - Page not found')
        pass

    else:
        try:
            loadedOddsCheck = WebDriverWait(driver1, 25)
            loadedOddsCheck.until(EC.element_to_be_clickable \
            ((By.XPATH, ".//h3[contains(@data-params, 'hideShowEvents')]")))
        except TimeoutException:
                pass

        unloadedOdds = driver1.find_elements_by_xpath \
        (".//h3[contains(@data-params, 'loadExpandEvents')]")
        for clicking in unloadedOdds:
            clicking.click()
            randomLoadTime2 = random.randint(50, 100)/100
            time.sleep(randomLoadTime2)
    
        matchArr = []
        leaguer = single_url

        htmlSourceOrig = driver1.page_source

Tags: 数据inhttpshttpurl链接driver浏览器

热门问题