Selenium 被 iFrame 阻止,现在从 RotoWire 抓取时不返回所有数据

问题描述 投票:0回答:1

我有一个功能可以通过 Rotowire 获取每个 NBA 球员的预计上场时间。它运行良好,但周末该网站似乎添加了某种 Google Ads iFrame,现在导致我的程序抛出“ElementClickInterceptedException:在点 (x,y) 处不可点击。”

我使用“execute_script”(滚动到视图/强制单击)进行了一些调整,以尝试解决此异常,并最终设法再次访问分钟投影,但现在程序仅返回每个团队中的一个团队的值对决(客队)。

def get_nba_lineups():

    driver = gs.Chrome()

    ## Some code to login

    # Navigate to NBA Lineups
    driver.get('https://www.rotowire.com/basketball/nba-lineups.php')
    time.sleep(3)
    data = []
    buttons = WebDriverWait(driver, 3).until(
        EC.presence_of_all_elements_located((By.CLASS_NAME, "see-proj-minutes")))

    for button in buttons:
        driver.execute_script("arguments[0].scrollIntoView(true);", button)
        time.sleep(1)
        WebDriverWait(driver, 3).until(EC.element_to_be_clickable(button))
        driver.execute_script("arguments[0].click();", button)
        time.sleep(1)

        team = WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.CLASS_NAME, 'lineups-viz')))
        teamName = team.find_element(By.TAG_NAME, 'img').get_attribute('alt')
        players = driver.find_elements(By.CLASS_NAME, 'lineups-viz__player')

        for player in players:
            name = player.find_element(By.TAG_NAME, 'a').text
            projMin = player.find_element(By.CLASS_NAME, "minutes-meter__proj")
            projMin = int(projMin.text.split(' ')[0])
            data.append({'Team': teamName, 'Player': name, 'Projected Minutes': projMin})

        close_button = WebDriverWait(driver, 3).until(
            EC.element_to_be_clickable((By.CLASS_NAME, "lineups-viz__close"))
        )
        driver.execute_script("arguments[0].click();", close_button)
        time.sleep(1)

    driver.quit()

    df = pd.DataFrame(data)
    return df

有谁知道为什么这不再获取所有数据以及我该如何修复它?或者,如何绕过阻止按钮的 iFrame,以便我可以再次使用以前的工作代码?我尝试扩大驱动程序窗口并添加额外的暂停,但到目前为止没有任何效果。预先感谢您的任何建议。

python selenium-webdriver exception web-scraping iframe
1个回答
0
投票

您的代码应该可以正常工作。我没有登录,所有家庭统计数据都被隐藏并要求订阅。 检查您登录的用户是否可以正确访问它。

否则,您应该能够使用代码抓取数据。

最好使用js点击按钮而不是关闭广告iframe。

© www.soinside.com 2019 - 2024. All rights reserved.