问题爬行亚马逊,元素无法滚动到视图中 [英] Issue Crawling Amazon, Element Cannot Be Scrolled into View

查看:38
本文介绍了问题爬行亚马逊,元素无法滚动到视图中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在亚马逊上抓取页面时遇到问题.

I'm having an issue crawling pages on Amazon.

我试过使用:

  • 执行JS脚本
  • 行动链
  • 显式等待

似乎没有任何效果.一切都会抛出一个异常或错误或其他.

Nothing seems to work. Everything throws one exception or error or another.

ff = create_webdriver_instance()
ff.get('https://www.amazon.ca/gp/goldbox/ref=gbps_ftr_s-3_4bc8_dct_10-?gb_f_c2xvdC0z=sortOrder:BY_SCORE,discountRanges:10-25%252C25-50%252C50-70%252C70-&pf_rd_p=f5836aee-0969-4c39-9720-4f0cacf64bc8&pf_rd_s=slot-3&pf_rd_t=701&pf_rd_i=gb_main&pf_rd_m=A3DWYIK6Y9EEQB&pf_rd_r=CQ7KBNXT36G95190QJB1&ie=UTF8')
next_button = ff.find_element_by_xpath('(//li/a[contains(text(), "Next")])[1]')

尝试 #1:执行 JS

脚本

ff.execute_script('arguments[0].scrollIntoView()', next_button)

错误

元素无法滚动到视图中

脚本

actions = ActionChains(ff)
actions.move_to_element(next_button)
actions.click(next_button)
actions.perform()

错误

TypeError: rect 未定义

next_button = WebDriverWait(ff, 60).until(
    EC.visibility_of_element_located((By.XPATH, '(//li/a[contains(text(), "Next")])[1]'))
)

我也尝试过使用 element_to_be_clickable.这两者最终都会超时.

I've also tried using element_to_be_clickable. Both of these end up timing out.

推荐答案

那是因为您正在尝试处理隐藏链接.试试下面的

That's because you're trying to handle hidden link. Try below instead

next_button = ff.find_element_by_partial_link_text('Next')
next_button.click()

next _button = ff.find_element_by_link_text('Next→')

请注意,find_element_by_partial_link_text/find_element_by_link_text 仅搜索可见 链接.

Note that find_element_by_partial_link_text/find_element_by_link_text searching for visible links only.

您可能还需要致电

ff.implicitly_wait(10)

一次在你的脚本中(在你的 WebDriver 实例定义之后)或使用 ExplicitWait 如下

once in your script (somewhere after your WebDriver instance definition) or use ExplicitWait as below

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

next_button = WebDriverWait(ff, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Next→')))

确保即使有渲染延迟也能找到所需的元素

to be sure that required element will be find even with rendering delay

这篇关于问题爬行亚马逊,元素无法滚动到视图中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆