![](/img/trans.png)
[英]Finding an element using src or href code in 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.