当前位置: 首页 > 知识库问答 >
问题:

关闭覆盖Selenium中“加载更多”按钮的随机视频弹出广告

王子明
2023-03-14

我正在使用selenium抓取大约1000个URL,并且我已经非常接近让它工作了。每个url都有一个“加载更多”按钮,我不断单击该按钮,直到抛出一个过时元素异常,并传递该异常。刮擦效果很好,直到随机视频广告覆盖了按钮。我认为使用XPATH来定位按钮可以解决这个问题,但事实并非如此。我知道使用java来执行脚本将解决这个问题,但我不确定如何在循环的基础上使用。下面是我目前的情况。

    if clicks >= 1:
        webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform()
        sleep(1)
        try:
            while EC.element_to_be_clickable((By.XPATH, '/ html / body / div[2] / div / div / div[4] / div[4] / div / div / button')):
                button = driver.find_elements_by_xpath("/ html / body / div[2] / div / div / div[4] / div[4] / div / div / button")
                button[0].click()
                sleep(2)
                if not button.is_enabled():
                    print('ad is covering button, hopefully this works')
                    wait2 = WebDriverWait(driver, 10)
                    wait2.until(EC.element_to_be_clickable(By.XPATH("/ html / body / div[2] / div / div / div[4] / div[4] / div / div / button").click()))
                    
        except StaleElementReferenceException:
            pass

    else:
        print('under 10 reviews')
        pass

我希望if not行能挽救这一天...但我不确定我是否设置正确。我还发现此链接可能会有所帮助:Selenium-Debug: Element在点(X, Y)不可单击,但我不知道如何使用执行脚本功能连续单击。此链接也可能很有帮助:WebDriver单击()vs JavaScript单击()任何帮助都将不胜感激。

共有1个答案

堵浩波
2023-03-14

你可以简单地把它修改成这个。很确定你需要一个超时,除了。以防它找不到。

wait = WebDriverWait(driver, 10)
while True:
    try:
        elem=wait.until(EC.element_to_be_clickable((By.XPATH,"//button[.='load more']")))
        driver.execute_script("arguments[0].click();", elem)
    except StaleElementReferenceException:
        break
    except TimeOutException:
        break
 类似资料:
  • 我正在尝试使用ionic admobFree本机插件在ionic 3中显示奖励视频广告。我可以显示横幅和插页广告,但RewardedVideo广告并非每次都显示。因为RewardedVideo广告有时会出现,这意味着我必须把事情做对。我也尝试过显示测试广告,但rewardedVideo广告也没有显示为测试广告。admob中是否存在导致这种行为的某种设置,因为我没有收到任何错误,而是收到了错误。这是

  • 我使用hibernate并尝试优化加载带注释的外部实体 我不想在hibernate查询期间检索外部实体并使用延迟获取类型。稍后(会话已经关闭之后),我想获取那个外部实体,但使用的工具不同于hibernate(另一个缓存的DAO(GuavaCache),它已经存储了外部实体)。 当然,我立即得到了一个LazyLaunalizationException。 我不能用@Transient替换@ManyT

  • 我正在尝试使用Admob在我的android应用程序中显示奖励视频广告。如果我用谷歌示例广告单元ID运行应用程序,它工作得很好,但如果我将其更改为我的奖励广告单元ID,则不会加载广告。

  • 我想在JavaFX中创建特定的组件。在 onClick 事件后显示 poupup 的按钮。 情景: > < li> 我们单击按钮 弹出显示下面的按钮(如图片上所示)

  • 我想知道如何随机选择1,以及如何使用selenium IDE在我的网站上的单选按钮/检查字段中随机选择1-6个选项之间的某个地方。 我已经有了一个脚本,可以在下拉菜单中进行随机选择,这工作很好-可以轻松修改以进行其他选择吗?(请包括代码示例,因为我是新手。) 感谢您的帮助。

  • 我有两个视频,其中一个覆盖在另一个上,覆盖的只有几秒钟长,我希望它在主视频播放的同时保持循环。我尝试了我能想到的一切,但似乎在ffmpeg中都行不通 将一个覆盖在另一个之上,但没有循环。将更改为 给我一条错误消息 [movie@01B19FC0]找不到键“loop”。[movie@01b19f40]分析选项字符串时出错:“loop=0”初始化带有参数“重叠”的筛选器“movie”时出错。wmv:l