如何从网站上抓取没有类或ID的元素

时间:2020-06-22 03:42:51

标签: python selenium web-scraping

我正在从事硒项目。在该项目中,我试图从网站上抓取特定元素。该元素没有与之关联的类或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按钮以显示含硒的规格区域。万一您想知道,那不是问题。

4 个答案:

答案 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:']]")))))
相关问题