如何通过硒从当前节点中选择元素

时间:2018-09-07 06:22:13

标签: python selenium xpath

我想在下面的网站上按硒选择联系方式 http://buyersguide.recyclingtoday.com/search。 为了正确匹配正确的信息,我想先选择行,然后从行中选择信息。简单的代码如下,现在我的问题是如何从每一行中选择信息,例如公司名称,电子邮件。

代码:

/sent

运行以下代码作为答案,但我仍然遇到问题?

from time import sleep
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
import pandas as pd 

driver = webdriver.Chrome('D:\chromedriver_win32\chromedriver.exe')
driver.get('http://buyersguide.recyclingtoday.com/search')
rows = driver.find_elements_by_xpath('//*[@id="Body_tbl"]/tbody/tr')
for row in rows:
    email = row.find_element_by_xpath('//*/tr/td[3]/a').text
    company=row.find_element_by_xpath('//*/tr/td[1]').text

未选择内容

3 个答案:

答案 0 :(得分:2)

您可以获取诸如

之类的详细信息

您必须在没有表头的情况下找到表中可用的行数,

根据您的HTML,这是示例。

使用Python的示例:

rows = driver.find_elements_by_xpath("//td[@style='font-weight:bold;']//parent::tr")
for row in rows:
     company=row.find_element_by_xpath('./td[1]').text
     address = row.find_element_by_xpath('./td[2]').text
     contact= row.find_element_by_xpath('./td[3]//a').text
     number= row.find_element_by_xpath('./td[5]').text

使用Java的示例:

List<WebElement> findData = driver.findElements("//td[@style='font-weight:bold;']//parent::tr");
        for (WebElement webElement : findData) {
            String getValueofCompany = webElement.findElement(By.xpath("./td[1]")).getText();
            String getValueofAddress = webElement.findElement(By.xpath("./td[2]")).getText();
            String getValueofContact = webElement.findElement(By.xpath("./td[3]//a")).getText();
            String getValueofPhoneNumber = webElement.findElement(By.xpath("./td[5]")).getText();           
        }

答案 1 :(得分:1)

您可以使用以下内容:

for row in rows:
    email = row.find_element_by_xpath('.//td[3]/a').text
    company = row.find_element_by_xpath('.//td[1]').text

答案 2 :(得分:1)

您想要的数据始于

tr[3]//td[1]-包含公司名称作为文本

tr[3]//td[3]-包含电子邮件,但具有href属性

因此,tr的循环从索引3开始到rows WebElement的长度

    rows = driver.find_elements_by_xpath('//*[@id="Body_tbl"]/tbody/tr')
    for index, element in enumerate(rows,start=2):
        companyName = rows.find_element_by_xpath("//tr[" + index + "]//td[1]")
    if companyName is not None:
        companyName.getText();
    companyEmail = driver.find_element_by_xpath("//tr[" + index + "]//td[3]/a")
    if companyEmail is not None:
        companyEmail.get_attribute("href"); // this will give exact if email is there

注意-我无法测试代码,请注意边界条件。谢谢