通过partial href(Python Selenium)查找元素

2024-04-28 00:02:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图访问web数据库中具有不同xpath但非常可预测的href方案的元素中的文本。以下是一些示例:

<a href="/mathscinet/search/mscdoc.html?code=65J22,(35R30,47A52,65J20,65R30,90C30)"> 65J22 (35R30 47A52 65J20 65R30 90C30) </a>

在这个例子中,我想提取“65J22(35R30 47A52 65J20 65R30 90C30)”

在这个例子中,我想提取“05C80(05C15)”。我的web scraper不能直接通过xpath进行搜索,因为我想要的元素的xpath在页面之间变化,所以我正在寻找一种更迂回的方法。在

我的主要想法是使用每个href包含“/mathscinet/search”这一事实/mscdoc.html?code=“。Selenium不能直接搜索href,但我正在考虑做类似于C# implementation

Driver.Instance.FindElement(By.XPath("//a[contains(@href, 'long')]"))

为了将其移植到python,我能想到的唯一类似的方法是使用^{} operator,但我不确定当所有内容都通过xpath嵌套在find_元素中时,语法将如何工作。我如何将所有这些想法结合起来以获得我想要的文本?在

driver.find_element_by_xpath("//a['/mathscinet/search/mscdoc.html?code=' in @href]").text

Tags: 方法文本web数据库元素searchhtml方案
2条回答

根据HTML,您已经分享了@AndreiSuvorkov的答案可能会满足您当前的需求。也许您可以通过以下方法获得更细粒度的并构造优化的xpath

  • 而不是使用contains,而是使用starts-with
  • 包括@href属性的?code=部分
  • 您的有效代码块将是:

    all_elements = driver.find_elements_by_xpath("//a[starts-with(@href,'/mathscinet/search/mscdoc.html?code=')]")
    for elem in all_elements:
        print(elem.get_attribute("innerHTML"))
    

如果我理解正确的话,你想找到所有元素,它们都有相同的partial href。您可以使用这个:

elements = driver.find_elements_by_xpath("//a[contains(@href, '/mathscinet/search/mscdoc.html')]")
for element in elements:
    print(element.text)

或者如果要定位一个元素:

^{2}$

这将给出一个所有元素的列表。在

相关问题 更多 >