как выбрать элементы из текущего узла по селену - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу выбрать контактную информацию по селену на сайте ниже http://buyersguide.recyclingtoday.com/search. для сопоставления нужной информации по одной, сначала я хочу выбрать строки, а затем выбрать информацию из строк. Простой код, как показано ниже, теперь мой вопрос, как выбрать информацию из каждой строки. Например, название компании, Эл. адрес.

код:

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

запустить код как ответы ниже, но я все еще сталкиваюсь с проблемой?

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')
records = [] 
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
     records.append((company,address,contact,number))


df = pd.DataFrame(records, columns=['company','number','address', 'contact']) 

контент не выбран

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы можете использовать что-то вроде этого:

for row in rows:
    email = row.find_element_by_xpath('.//td[3]/a').text
    company = row.find_element_by_xpath('.//td[1]').text
0 голосов
/ 07 сентября 2018

Данные, которые вы хотите, начинаются с

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

Примечание. Я не смог протестировать код, пожалуйста, позаботьтесь о граничных условиях. Спасибо

0 голосов
/ 07 сентября 2018

Вы можете получить детали, как,

Вы должны найти номер строки, доступной в таблице, без заголовка таблицы,

Это пример в соответствии с вашим 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();           
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...