BeautifulSoup соскабливает с веб-страницы, уже открытой Selenium - PullRequest
0 голосов
/ 26 января 2019

Я бы хотел очистить веб-страницу, которую Selenium открыл с другой веб-страницы.

Я ввел поисковый запрос на веб-сайт, используя Selenium, и это привело меня к новой странице. Моя цель - создать суп из этой новой страницы. Но суп создается из предыдущей страницы, где я ввел свой поисковый запрос. Помогите пожалуйста!

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get('http://www.ratestar.in/')
inputElement = driver.find_element_by_css_selector("#txtStock")
inputElement.send_keys('GM Breweries')
inputElement.send_keys(Keys.ENTER)
driver.wait.until(staleness_of('txtStock')

source = driver.page_source
soup = BeautifulSoup(source)

Ответы [ 2 ]

0 голосов
/ 26 января 2019

@ Дженс Дибберн дал рабочее решение. Но это не обязательно, что точное имя компании должно быть указано в поиске. Случается так, что при вводе неточного имени появляется всплывающее окно.

enter image description here

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

Вы также можете подождать, пока не появится этот выпадающий список и отправить кнопку ввода. Это также отлично работает. Обратите внимание, что в результате будет выбран первый элемент в раскрывающемся списке, если присутствует более одного элемента.

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get('http://www.ratestar.in/')
inputElement = driver.find_element_by_css_selector("#txtStock")
inputElement.send_keys('GM Breweries')
drop_down=driver.find_element_by_css_selector("#listPlacementStock")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#listPlacementStock:not([style*="display: none"])')))
inputElement.send_keys(Keys.ENTER)
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="CompanyLink"]')))
source = driver.page_source
soup = BeautifulSoup(source,'html.parser')
print(soup)
0 голосов
/ 26 января 2019

Вы должны знать названия компаний, которые вы искали для поиска.После того, как вы используете send_keys, вы попытались проверить на предмет устаревания элемента.Я не понял, как это заявление должно работать.Я добавил WebDriverWait для элемента новой страницы.

Для меня переопределение части селена до получения источника страницы:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get('http://www.ratestar.in/')
inputElement = driver.find_element_by_css_selector("#txtStock")
inputElement.send_keys('GM Breweries Ltd.')
inputElement.send_keys(Keys.ENTER)
company = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'lblCompany')))

source = driver.page_source

Вы должны добавить обработку исключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...