簡體   English   中英

通過部分href查找元素(Python Selenium)

[英]Finding an element by partial href (Python Selenium)

我正在嘗試從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)”

 <a href="/mathscinet/search/mscdoc.html?code=05C80,(05C15)"> 05C80 (05C15) </a> 

在這個例子中,我想提取“05C80(05C15)”。 由於我想要的元素的xpath在頁面之間變化,我的web scraper將無法直接通過xpath進行搜索,因此我正在尋找更加迂回的方法。

我的主要想法是使用每個href包含“/mathscinet/search/mscdoc.html?code=”的事實。 Selenium不能直接搜索hrefs,但我正在考慮做類似於這個C#實現的事情:

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

要將其移植到python,我能想到的唯一類似方法是使用in運算符 ,但我不確定當所有內容嵌套在find_element_by_xpath中時語法是如何工作的。 我如何將所有這些想法結合在一起以獲得我想要的文本?

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

如果我理解你想要找到具有相同部分href的所有元素。 你可以用這個:

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

或者如果你想找到一個元素:

driver.find_element_by_xpath("//a[contains(@href, '/mathscinet/search/mscdoc.html')]").text

這將給出所有元素的列表。

根據您分享的HTML @ AndreiSuvorkov的答案可能會滿足您當前的要求。 也許您可以通過以下方式獲得更多粒度並構建優化的xpath

  • 而不是使用contains使用starts-with
  • 包含?code= @href屬性的一部分
  • 您的有效代碼塊將是:

     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")) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM