对于Selenium来说,这是非常新的东西,但是我在从该网站选择我想要的元素时遇到了麻烦。在这种情况下,我使用Chrome的“复制XPath工具”获得了x_path。基本上,我希望从网站中提取CID文本(在这种情况下为4004),但是我的代码似乎无法执行此操作。任何帮助将不胜感激!
我也尝试过使用CSS选择器方法,但是它返回相同的错误。
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.binary_location = '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary'
driver= webdriver.Chrome()
chem_name = "D008294"
url = "https://pubchem.ncbi.nlm.nih.gov/#query=" + chem_name
driver.get(url)
elements = driver.find_elements_by_xpath('//*[@id="collection-results-container"]/div/div/div[2]/ul/li/div/div/div/div[2]/div[2]/div[2]/span/a/span/span')
driver.close()
print(elements.text)
到目前为止,这是我收到的错误:“列表”对象没有属性“文本”
答案 0 :(得分:2)
这是您可以使用的xpath。
//span[.='Compound CID']//following-sibling::a/descendant::span[2]
您的脚本为什么不起作用:我的代码中有2个问题。
elements = driver.find_elements_by_xpath('//*[@id="collection-results-container"]/div/div/div[2]/ul/li/div/div/div/div[2]/div[2]/div[2]/span/a/span/span')
driver.close() # <== don't close the browser until you are done with all your steps on the browser or elements
print(elements.text) # <== you can not get text from list (python will through error here
如何解决:
CID = driver.find_element_by_xpath("//span[.='Compound CID']//following-sibling::a/descendant::span[2]").text # <== returning the text using find_element (not find_elements)
driver.close()
print(CID) # <== now you can print `CID` though browser closed as the value already stored in variable.
答案 1 :(得分:0)
函数driver.find_elements_by_xpath
返回元素的列表。您应该循环获取每个元素的文本
赞:
for ele in print(elements.text):
print(ele.text)
或者,如果您要匹配第一个元素,请改用driver.find_element_by_xpath
函数。
答案 2 :(得分:0)
使用xpath提供的chrome总是无法正常工作。首先,您必须知道如何编写xpath并验证其chrome控制台。
请参阅这些链接,以帮助您了解xpaths
https://www.guru99.com/xpath-selenium.html
https://www.w3schools.com/xml/xpath_syntax.asp
在这种情况下,首先找到包含文本CID的跨度,然后移至父跨度,向下移至子级a / span / span。像// span [contains(text(),'Compound CID'] / parent :: span / a / span / span。
而且您还需要找到返回单个元素并从中获取文本的元素。如果使用findelements,则它将返回元素列表,因此您需要循环并从这些元素获取文本。
答案 3 :(得分:0)