Python Beatifulsoup не может правильно использовать результат селена - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь разобрать веб-страницу с помощью Beautifulsoup.Я вижу, что страница правильно загружена в селене с использованием chromedriver, но окончательный результат равен нулю, и когда я вижу распечатанную страницу, напечатанную в BeautifulSoup, она не показывает всю страницу, которую селен показывает в своем автоматическом браузере.

Код, который я использую для этой цели:

page_soup = soup(driver.page_source, "html.parser")
print (page_soup)
containers = page_soup.findAll("div", class_="row ploc-l-row--gutterV flex-wrap flex-align-start flex-center-vertical")
print (len(containers))

Мне нужен доступ к информации о каждом партнере, но результат нулевой.Страница, над которой я работаю:

https://locatr.cloudapps.cisco.com/WWChannels/LOCATR/openBasicSearch.do;jsessionid=8CDF9284D014CFF911CB8E6F81812619

Ответы [ 3 ]

2 голосов
/ 26 сентября 2019

Результат загружается с использованием JavaScript.Вам нужно подождать, пока результаты поиска загрузятся, прежде чем списывать.Вот рабочий пример,

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup as soup
import time

url = 'https://locatr.cloudapps.cisco.com/WWChannels/LOCATR/openBasicSearch.do'
driver = webdriver.Chrome(executable_path='C:/Selenium/chromedriver.exe')
driver.get(url)
SearchString = 'CALIFORNIA'
Location = driver.find_element_by_name("location")
Location.send_keys(SearchString)
#search = WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located(By.XPATH,"//li//span[contains(text(),'"+SearchString+"')]"))
#search.click()
time.sleep(3)
driver.find_element_by_xpath("//li//span[contains(text(),'"+SearchString+"')]").click()
driver.find_element_by_id("searchBtn").click()

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID,'searchResultsList')))
time.sleep(3)
page_soup = soup(driver.page_source, "html.parser")
print(page_soup.prettify())
containers = page_soup.findAll("div", class_="row ploc-l-row--gutterV flex-wrap flex-align-start flex-center-vertical")
print (len(containers))

driver.close()

Результат: 5

2 голосов
/ 26 сентября 2019

На основании вашего пояснения к комментарию я должен получить имя партнера для каждого партнера, отображаемого в результатах поиска:

С синтаксисом BeautifulSoup:

partnerWebElements = page_soup.findAll(title="View Profile")

С использованием только синтаксиса Selenium:

partnerWebElements = driver.find_elements_by_xpath("//a[@title='View Profile']")

Затем вы можете получить текст для каждого имени партнера, например:

for partnerWebElement in partnerWebElements:
    print(partnerWebElement.text);
1 голос
/ 27 сентября 2019

К вашему сведению, эта страница использует jQuery, что делает это простым:

driver.execute_script("return $('div[class=\"row ploc-l-row--gutterV flex-wrap flex-align-start flex-center-vertical\"]').length")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...