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

使用硒点击一个链接,然后返回主页并点击其他链接

秦胡媚
2023-03-14

我正在做一个网络抓取,我可以在一个特定的链接中获取信息,但是我想通过去那个页面上每个项目的链接来自动化这个过程,然后获取信息回到主页,然后点击下面项目的链接。

网址是:https://ca.iherb.com/c/Vitamins?noi=48

我想点击“加州黄金营养、黄金C、维生素C、1000毫克、60粒蔬菜胶囊”项目,然后点击底部的“查看所有评论”。然后返回主页并单击以下项目的链接。

我使用此代码获取所有项目的链接,但无法确定是否单击每个链接中的“查看所有评论”,然后返回主页:

driver = webdriver.Chrome(chrome_path)
driver.get('https://ca.iherb.com/c/Vitamins?noi=48')

x = [my_elem.get_attribute("href") for my_elem in driver.find_elements_by_xpath("//div[@class='absolute-link-wrapper']/a")]

请帮助查看下面的插图,非常感谢:

在此输入图像描述

在此输入图像描述

在此输入图像描述

共有2个答案

昌乐生
2023-03-14

我倾向于使用Selenium和BeautifulSoup混合使用这种类型的抓取,因为Javascript较少,并且可以使用BeautifulSoup绕过某些单击每个链接的操作,因此最初的部分不需要使用Selenium:

我们可以使用这段代码获取此页面中的所有超链接。

import requests
from bs4 import BeautifulSoup

url = 'https://ca.iherb.com/c/Vitamins?noi=48'

html = requests.get(url).content

soup = BeautifulSoup(html,'lxml')

a_tags = soup.find_all('a', class_ = 'absolute-link product-link',href = True)
arr_url= []

for a in a_tags:

    arr_url.append(a['href'])
    print(a['href'])

输出:

您可以使用Selenium直接打开上述超链接,点击“查看所有评论”。

阎知
2023-03-14

您应该首先使用requests模块尝试相同的方法,并且应该选择selenium作为最后的手段。当您首先使用selenium开始编写脚本时,我想到了一个面向selenium的解决方案。鉴于以下各项应能发挥作用:

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

driver = webdriver.Chrome()
driver.get("https://ca.iherb.com/c/Vitamins?noi=48")
wait = WebDriverWait(driver, 10)

#close the pop up
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"svg[data-ga-event-action='list-close']"))).click()

#store all the links in a list
item_links = [item.get_attribute("href") for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,".absolute-link-wrapper > a.product-link")))]

#iterate over the links
for item_link in item_links:
    driver.get(item_link)

    #locate and click on the `View All Reviews` link
    all_reviews_link = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"span.all-reviews-link > a")))
    driver.execute_script("arguments[0].click();",all_reviews_link)
    time.sleep(5) #slow the script down
 类似资料:
  • 我想用硒点击“?例如,在网站上你点击的按钮会重定向到href,但是当我使用selenium时,什么也没发生。我已经尝试了这么多迭代,也查找了类似的指南,但无济于事。

  • 问题内容: 我正在尝试通过Selenium进行网络抓取。我的问题很简单:如何找到链接,然后如何单击它?例如:以下是我要网页抓取的HTML: 因此,如您所见,“详细信息”是一个链接。 如何使用Selenium找到该链接并单击它? 问题答案: 您可以使用: 例如: 要单击它,只需调用click方法:

  • 问题内容: 我正在FireFox中使用Selenium的IDE进行一些测试,我希望Selenium单击第二个链接(Text2)。知道我该怎么做吗?不幸的是,我无权访问HTML并且无法对其进行修改。记录功能似乎没有注册点击。 该代码附在下面。提前致谢! 问题答案: 硒也支持定位器。如果您知道确切的链接文本,则可以使用此定位器,但不能使用其他定位器。因此,对于上述示例:或。(有关其他定位器,请参见此网

  • 我突然觉得点击链接有问题。这是以前的工作,但现在不是,我不能找出什么是错的。 这是链接的定义方式: 这是我点击链接的代码。其中有几个,我想做的是获取所有这些,这样我就可以遍历所有这些。 它没有通过List语句。它就坐在那里。有什么想法吗?

  • 我刚开始玩硒,我正在寻找一些帮助。在我试图测试的网页上,我有一个搜索按钮,当页面加载时,我有一个html表,显示在它下面的结果。 搜索结果表的html如下所示... 使用selenium IDE,我能够创建一个junit测试来执行屏幕快照中的搜索,但我很难找到如何修改单元测试,以便正确地等待搜索完成,然后在页面上返回结果后,单击搜索结果表第一行中的第一项。

  • 我正在使用selenium chrome webdriver用python编写一个脚本,我想点击一个链接。链接本身是: a href=“javascript:contentReplace('/cgi-bin/ssol/9PGaiwzaxu43ZaLXZ8mAix/?p%.5Fr%.5Fid=a5UAMSbnZrZMIowCvr5gzh (我脱下开口 我无法使用find\u element\u by