Python 问题爬行亚马逊,元素无法滚动到视图中
我在亚马逊上的网页爬网有问题 我试过使用:Python 问题爬行亚马逊,元素无法滚动到视图中,python,selenium,web-scraping,web-crawler,screen-scraping,Python,Selenium,Web Scraping,Web Crawler,Screen Scraping,我在亚马逊上的网页爬网有问题 我试过使用: 执行JS脚本 作用链 显式等待 似乎什么都不管用。每件事都会引发一个异常或错误 基本脚本 尝试#1:执行JS 剧本 错误 元素无法滚动到视图中 尝试#2:行动链 剧本 错误 TypeError:rect未定义 尝试#3:显式等待 我也尝试过使用element\u可点击。这两个都会超时。这是因为您试图处理隐藏链接。试试下面 next_button = ff.find_element_by_partial_link_text('Next') next_
- 执行JS脚本
- 作用链
- 显式等待
元素无法滚动到视图中
尝试#2:行动链
剧本
错误
TypeError:rect未定义
尝试#3:显式等待
我也尝试过使用
element\u可点击
。这两个都会超时。这是因为您试图处理隐藏链接。试试下面
next_button = ff.find_element_by_partial_link_text('Next')
next_button.click()
或
请注意,通过部分链接文本查找元素
/通过链接文本查找元素
仅搜索可见链接
你也可能需要打电话
ff.implicitly_wait(10)
在脚本中(WebDriver实例定义之后的某个地方)或按如下所示使用
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→')))
确保即使渲染延迟也能找到所需元素,但按钮在DOM中可见,而不是隐藏?!?!那么为什么我的方法不起作用呢?不。由
//li/a[contains(text(),“Next”)][1]
找到的按钮位于div
内部,类名隐藏。请注意,XPath中的索引[1]
表示第一。如果要处理第二个(可见)链接,应使用//li/a[contains(text(),“Next”)][2]
。但正如我所说,按链接文本搜索更可靠,因为它会忽略所有隐藏的链接…你错了,只有[2]
的父级具有隐藏的,所以(//li/a[contains(text(),“Next”)][1]
不起作用???(//li/a[contains(text(),“Next”))[1]
在查找链接时没有问题,但由于某些原因,它无法滚动到视图中…不知道为什么您仍然不同意。第一个链接显然是隐藏的,第二个链接是可见的。如果您不相信我,请尝试print(dr.find_element_by_xpath('(//li/a[contains(text(),“Next”))[1])。is_display())
和print(dr.find_element_by_xpath('(//li/a[contains(text(),“Next”)))[2])。is_display())
next_button = WebDriverWait(ff, 60).until(
EC.visibility_of_element_located((By.XPATH, '(//li/a[contains(text(), "Next")])[1]'))
)
next_button = ff.find_element_by_partial_link_text('Next')
next_button.click()
next _button = ff.find_element_by_link_text('Next→')
ff.implicitly_wait(10)
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→')))