我正在用selenium和python创建一个自动化测试,并试图让它点击页面上的每个产品。我想遵循的步骤是:
1.去亚马逊网站。
1.点击搜索栏。
1.在搜索栏中键入“3D打印机”。
1.单击提交按钮。
1.点击第一个搜索结果。
1.等待10秒钟。
1.返回到搜索结果。
1.点击第二个搜索结果。
1.等等等等
到目前为止,我的代码如下所示
# Navigate to the main product page
driver.get('https://www.amazon.com/')
# Find Search Bar and enter product to search for
driver.find_element(By.ID, 'twotabsearchtextbox').send_keys('3D Printers')
#Find and click Submit button
driver.find_element(By.ID, "nav-search-submit-button").click()
# Find all the product links on the page
product_links = driver.find_elements(By.XPATH, "div[@data-component-type='s-search-result']//a[@class='a-link-normal']")
# Iterate over each product link
for link in product_links:
print('link', link.text)
# Click on the product link to go to the product page
link.click()
driver.implicitly_wait(10)
# Go back to the main product page
driver.back()
# Wait for the page to load before finding the next link
driver.implicitly_wait(10)
driver.quit()
当我运行测试时,没有一个链接被点击,但在测试完成后我没有得到任何错误。我尝试添加一个print()
方法,看看是否可以打印链接中的文本,但在控制台中也看不到任何内容。有人知道我做错了什么吗?
3条答案
按热度按时间bejyjqdl1#
我修改了你的xpath,因为它总是找到零个元素。现在看起来像这样:
//span[@class = 'a-size-medium a-color-base a-text-normal']
另外,每次调用driver.back()函数时都必须更新列表,否则列表中的项将无效,您将获得异常。我已经通过更新for循环中的列表解决了这个问题。现在应该能用了
ej83mcc02#
也许你不需要所有的代码?您只需将搜索查询作为参数添加到URL中,即可直接访问搜索结果。例如,您可以使用Selenium的Browserist扩展来获取并单击元素。就像这样:
在充分披露,我是作者的Browserist包。Browserist是Selenium Web驱动程序的轻量级、不太冗长的扩展,使浏览器自动化更加容易。只需使用
pip install browserist
安装软件包即可。备注:
https://www.amazon.com/s?k=keywords
是默认的搜索查询URL。browser.get.attribute.values("//a[@class='a-link-normal']", "href")
部分通过定位相关的<a>...</a>
标记并获取它们的href
链接值所做的。WebDriverWait
、implicitly_wait
、expected_conditions
或类似的显式条件-它已经内置了,所以你不必担心它。相反,Browserist在与元素交互之前等待元素完全加载。更多关于这个概念在这里。这就是我得到的我希望这是有帮助的。如果你有问题就告诉我?
a0x5cqrl3#
使用Selenium的Browserist扩展的另一个变体:
备注:
implicitly_wait
那样的显式条件-它已经内置了,所以您不必担心它。这就是我得到的我希望这是有帮助的。如果你有问题就告诉我?