Соскоб с экрана с использованием «Прекрасного супа» - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь извлечь некоторую информацию с веб-сайта.Мне нужно нажать на ссылку, которая находится внутри тега «а».Я могу добраться до тега.Но когда я пытаюсь нажать на него.Я получаю сообщение об ошибке «NoneType»: объект не может быть вызван.

from selenium import webdriver
import time
from bs4 import BeautifulSoup
import pandas as pd

browser = webdriver.Chrome()
browser.get("url")
browser.find_element_by_class_name('formButton').click()
soup = BeautifulSoup(browser.page_source, 'html.parser')

embargo = soup.find_all(class_="dataOff")

for row in embargo:
    cells = row.find_all("td")
    rail = cells[0].get_text().strip()
    embargo = cells[1].find_element_by_class_name('dataOff').click()

Вот HTML-тег, по которому я хочу нажать на красивый суп.

<table class="dataLiquidTable">
<tr id = "headerRow> .... </tr>
<tr class = "dataOff">
<td> AO </td>
<td> <a href="url"> </a> </td>

Код должен нажатьссылка, которая находится внутри тега 'a'.

1 Ответ

0 голосов
/ 26 марта 2019

Попробуйте следующее, которое предназначается для первого дочернего тега a с элементом класса dataOff в таблице

browser.find_element_by_css_selector(".dataLiquidTable .dataOff a").click()

Похоже, что вам нужно несколько ссылок, в этом случае сначала попытайтесь извлечь ссылки (надеюсь, они действительные URL)

links = [item.get_attribute('href') for item in browser.find_elements_by_css_selector(".dataLiquidTable .dataOff a")]
for link in links:
    browser.get(link)

Затем вы должны объединить информацию, полученную на этих страницах, с информацией в начале вашего кода. Предполагая, что длины возвращаемых списков одинаковы.

Я не уверен

embargo = cells[1].find_element_by_class_name('dataOff').click()

действительно, так как выполняет действие, но вы пытаетесь назначить. Я предполагаю, что вы хотите перейти на новую страницу. Если вы можете уточнить это. Этот шаг я заменяю, собирая ссылки из элементов тега для использования по мере необходимости.

В противном случае вы всегда можете собрать веб-элементы с помощью

elems = browser.find_elements_by_css_selector(".dataLiquidTable .dataOff a")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...