Удаление тега <br>для правильного выравнивания при сканировании с использованием селена и python - PullRequest
0 голосов
/ 03 августа 2020

Я хочу удалить тег <br> html при сканировании страницы в Интернете, но замена, похоже, не работает. Я не уверен, есть ли другой способ сделать это или лучший способ сделать это с использованием селена и python. заранее спасибо.

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome("drivers/chromedriver")

driver.get("https://web3.ncaa.org/hsportal/exec/hsAction")

state_drop = driver.find_element_by_id("state")
state = Select(state_drop)
state.select_by_visible_text("New Hampshire")

driver.find_element_by_id("city").send_keys("Moultonborough")
driver.find_element_by_id("name").send_keys("Moultonborough Academy")
driver.find_element_by_class_name("forms_input_button").send_keys(Keys.RETURN)
driver.find_element_by_id("hsSelectRadio_1").click()

courses_subheading = driver.find_elements_by_tag_name("th.header")

print(courses_subheading[0].text, "     " ,courses_subheading[1].text, "     ", courses_subheading[2].text, "     ", courses_subheading[3].text, "     ", courses_subheading[4].text

Я пробовал это:

for i in courses_subheading:
    courses_subheading.replace("<br>", " ")

но получаю сообщение об ошибке: AttributeError: 'list' object has no attribute 'replace'

в настоящее время это выглядит так:

Course
Weight     Title     Notes     Max
Credits       OK
Through       Disability
Course

но я хочу вот так:

Course Weight     Title     Notes     Max Credits     OK     Through     Disability Course

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Для завершения, если вы действительно хотите удалить теги br, вы можете использовать (я исправил ваше выражение XPath):

import re
courses_subheading = driver.find_elements_by_xpath("(//tr[th[@class='header']])[1]/th")
headers = [re.sub('\s+',' ',el.text) for el in courses_subheading]
print(headers)

Вывод:

['Course Weight', 'Title', 'Notes', 'Max Credits', 'OK Through', 'Disability Course']
0 голосов
/ 03 августа 2020

Вместо удаления <br> вы можете легко избежать тегов <br>. Чтобы напечатать заголовки таблицы, например Title , Notes , et c, вам нужно вызвать WebDriverWait для visibility_of_all_elements_located(), и вы можете использовать любой из следующие стратегии локатора :

  • Использование css_selector:

    driver.get("https://web3.ncaa.org/hsportal/exec/hsAction")
    Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "state")))).select_by_visible_text("New Hampshire")
    driver.find_element_by_css_selector("input#city").send_keys("Moultonborough")
    driver.find_element_by_css_selector("input#name").send_keys("Moultonborough Academy")
    driver.find_element_by_css_selector("input[value='Search']").click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='hsCode']"))).click()
    print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table#approvedCourseTable_1 th.header")))])
    
  • Использование xpath:

    driver.get("https://web3.ncaa.org/hsportal/exec/hsAction")
    Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "state")))).select_by_visible_text("New Hampshire")
    driver.find_element_by_xpath("//input[@id='city']").send_keys("Moultonborough")
    driver.find_element_by_xpath("//input[@id='name']").send_keys("Moultonborough Academy")
    driver.find_element_by_xpath("//input[@value='Search']").click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='hsCode']"))).click()
    print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//table[@id='approvedCourseTable_1']//th[@class='header']")))])
    
  • Вывод в консоль:

    ['Course\nWeight', 'Title', 'Notes', 'Max\nCredits', 'OK\nThrough', 'Disability\nCourse']
    
  • Примечание : вам необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...