我正在从事硒项目。在该项目中,我试图从网站上抓取特定元素。该元素没有与之关联的类或ID。因此,我对如何提取该细节有些困惑。
这是website
在网站上,如果您查看规范的HTML标记,则会有一个div
和内容<b>Form</b>: Liquid
。我要提取“液体”。
到目前为止,这是我的代码
def extract():
form_element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//b[text()='Form']/")))
form_text = form_element.text
return form_text
这将导致TimeOutException
。我不确定自己在做什么错。
PS:我能够单击页面上的show more
按钮以显示含硒的规格区域。万一您想知道,那不是问题。
答案 0 :(得分:1)
使用此xpath从想要的元素中获取div
父元素:
//b[text()='Form:']//parent::div
要获取文本,您似乎必须使用 .get_attribute('innerHTML')
而不是 .text
尝试以下代码:
def extract():
form_element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//b[text()='Form:']//parent::div")))
form_text = form_element.get_attribute('innerHTML').split("</b>",1)[1]
return form_text
答案 1 :(得分:1)
当我们尝试通过定位符获取元素时,ID是唯一的元素,如果没有ID,则可以使用类名,xpath和linktext
使用此xapth:
//*[contains(text(),'Liquid')]
答案 2 :(得分:0)
您可以通过设置为driver = webdriver.Chrome()
{例如,如果您使用的是chrome并已安装chrome的网络驱动程序},然后将下一行写为; driver.find_element_by_tag_name("h1")
[例如,是否要提取有关h1元素的详细信息并使用该元素。]。希望我能正确理解您的问题。
答案 3 :(得分:0)
要获取值Liquid
,您需要先单击Show more
按钮,然后等待页面上元素的visibility_of_element_located()
。您可以使用以下方法获取值。
使用Split
()
driver.get("https://www.target.com/p/hawaiian-punch-fruit-juicy-red-1-gal-bottle/-/A-13051948")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[@data-test='toggleContentButton' and contains(.,'Show more')]"))).click()
print(WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//div[./b[text()='Form:']]"))).text.split("Form:")[-1])
使用Java Scripts Executor
driver.get("https://www.target.com/p/hawaiian-punch-fruit-juicy-red-1-gal-bottle/-/A-13051948")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[@data-test='toggleContentButton' and contains(.,'Show more')]"))).click()
print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//div[./b[text()='Form:']]")))))