Как напечатать таблицы в каждой ссылке под определенным заголовком в селене? - PullRequest
0 голосов
/ 09 мая 2018

Я хотел бы извлечь все таблицы из всех ссылок под определенным заголовком на веб-странице.

Код должен иметь возможность перейти к определенному заголовку и загрузить все таблицы из всех ссылок в нем.

1 Ответ

0 голосов
/ 09 мая 2018

Я думаю, что неправильно истолковал то, что вы хотели .. .text даст вам слова внутри тега. <a href="http://url">this is what it would get</a>. Если вы хотели получить реальную ссылку, вы были на правильном пути, но ваши элементы были слишком широкими.

Хорошо, уточни это из того, о чем я говорил, в вашем коде было несколько ошибок:

  • Вы назвали веб-драйвер chrome, а затем снова browser. Вам нужен только один из них.
  • Ваш путь содержит \. все пути Windows должны иметь \\ вместо всех обратных косых черт.

Теперь ваш код elems ... вы перечислили много вещей, вы должны получить одну группу элементов в строке и пройти через код страницы с инспектором.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
browser = webdriver.Chrome(
    'C:\\Users\\chromedriver.exe',
    chrome_options=chrome_options)
browser.get(
    "https://www.juniper.net/support/eol/") # <-- Sample Website here
time.sleep(1)

# Get the ul linklist elements, and all the links in them.
# So you can see how you could use this to narrow it down further.

lists = browser.find_elements_by_css_selector("ul.linkList") <-- Sample css_selector for the heading you want to extract from
links = [link.find_elements_by_tag_name("a") for link in lists]

# Now in links we have a list for each column element
# You can use indexing like links[0] to only select one column
for elems in links:
    print([link.get_attribute("href") for link in elems])

Чтобы перемещаться по ссылкам, вы должны отправить им драйвер (вы назвали его browser). Я бы использовал для этого функцию, если она усложняется, вы можете передать browser в качестве переменной.

tables = []
for elems in links:
    tables += [link.get_attribute("href") for link in elems]


for link in tables:
    browser.get(link)
    table = browser.find_elements_by_tag_name("td")
    if table:
        table_rows = [t.find_elements_by_tag_name("tr") for t in table]
        for table_row in table_rows:
            your_result = [t.text for t in table_row if not t.startswith("Pages")]
            if your_result:
                print(your_result)

browser.close()
browser.quit()

Как только вы начнете повторять процесс .. сначала проверьте страницу. Получите нужные элементы теми же методами.

...