извлечение соответствующих значений в столбце динамического веб-таблицы на основе заданного xpath с использованием селена и python - PullRequest
0 голосов
/ 11 октября 2019

У меня есть следующая динамическая веб-таблица

(checkbox)   ID_No  country_code  Date          Time                  FileName
            1A       5J           10/04/2019    12:05:45           filename_12:05
            1A       5J           10/04/2019    13:05:45           filename2
            3A       8J           10/03/2019    14:05:45           filename2
            4A       9J           10/04/2019    14:08:45           filename1

С левой стороны id_no есть флажок.

У меня есть следующий фрейм данных

ID_No  country_code  Date            Time               FileName
1A       5J           10/04/2019    
1A       5J           10/04/2019    

IЯ хочу проверять только строки в динамической веб-таблице, соответствующие коду страны, идентификатору ID_No и дате в кадре данных, и заполнять значения времени и имени файла в кадре данных

Я пишу приведенный ниже код в цикле, выбирая 1 флажок

for index,row in df.iterrows():
        id_no=row['ID_No']
        country_code=row['country_code']
        date=row['Date']
        driver = webdriver.Chrome() 
        driver.get(website_URL) 
        driver.find_element_by_xpath("//tr[td[contains(text(),date)] and 
        td[contains(text(),country_code)] and td[contains(text(),id_no)] ]//input").click()

в этом случае country_code = '5J' и ID_No = '1A' и Date = '10 / 04/2019 ', когда я использую этот xpath в консоли Chrome:

$x("//tr[td[contains(text(),'10/04/2019')] and 
td[contains(text(),'5J')] and td[contains(text(),'1A')] ]")[0]

Это содержит 1-ую строку, которая удовлетворяет вышеуказанному условию. Я получаю следующий HTML-код для строк этой веб-таблицы

<tr class="class1">
  <td width="2%"> </td>   <!–– checkbox ––>
  <td width="2%"> 1A </td>
  <td width="2%"> 5J </td>
  <td width="2%"> 10/04/2019 </td>
  <td width="2%"> 12:05:45 </td>
  <td width="2%"> filename_12:05 </td>
</tr>

Как извлечь соответствующее имя файла и время из динамической веб-таблицы, соответствующей флажкам Iвыберите?

в вышеприведенном случае, в первой итерации, extracted_filename='filename_12:05' and time='12:05:45' second_iteration, extracted_filename='filename2' and time='13:05:45

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Для обработки динамического элемента Induce WebDriverWait и следующего xpath.

Время возврата

print(WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//tr[td[contains(text(),'" + date + "')] and  td[contains(text(),'" + country_code +"')] and td[contains(text(),'" + id_no + "')] ]//input/following::td[4]"))).text)

Возвращаемое имя файла

print(WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//tr[td[contains(text(),'" + date + "')] and  td[contains(text(),'" + country_code +"')] and td[contains(text(),'" + id_no + "')] ]//input/following::td[5]"))).text)

Для выполнения вышеуказанного кода вам нужноимпортировать следующие.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
1 голос
/ 11 октября 2019

Можете ли вы попробовать эти xpaths и сообщить мне, как это происходит.

Это даст вам время совпадения строки

time= driver.find_element_by_xpath("//tr[td[contains(text(),date)] and td[contains(text(),country_code)] and td[contains(text(),id_no)] ]//input/../following-sibling::td[4]").text

Это даст вам имя файла соответствующей строки

filename=driver.find_element_by_xpath("//tr[td[contains(text(),date)] and td[contains(text(),country_code)] and td[contains(text(),id_no)]]//input/../following-sibling::td[5]").text

С вашим кодом:

for index,row in df.iterrows():
            id_no=row['ID_No']
            country_code=row['country_code']
            date=row['Date']
            driver = webdriver.Chrome() 
            driver.get(website_URL) 
            driver.find_element_by_xpath("//tr[td[contains(text(),date)] and td[contains(text(),country_code)] and td[contains(text(),id_no)] ]//input").click()
            time= driver.find_element_by_xpath("//tr[td[contains(text(),date)] and td[contains(text(),country_code)] and td[contains(text(),id_no)] ]//input/../following-sibling::td[4]").text
            filename=driver.find_element_by_xpath("//tr[td[contains(text(),date)] and td[contains(text(),country_code)] and td[contains(text(),id_no)]]//input/../following-sibling::td[5]").text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...