【问题标题】:BeautifulSoup scraping from a web page already opened by SeleniumBeautifulSoup 从 Selenium 已经打开的网页中抓取
【发布时间】:2019-06-19 23:45:34
【问题描述】:

我想抓取一个由 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)

【问题讨论】:

  • 当我手动进入该站点时,输入 G M Breweries 并按 Enter 键,没有任何反应。
  • 抱歉,G 和 M 之间没有空格的是 'GM Breweries'

标签: python selenium beautifulsoup


【解决方案1】:

您需要知道确切的公司名称才能进行搜索。使用 send_keys 后,您尝试检查元素是否过时。我不明白该声明应该如何工作。我为新页面的一个元素添加了 WebDriverWait。

以下内容适用于我重新调整 selenium 部分以获取页面源:

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

您应该添加异常处理。

【讨论】:

  • 非常感谢 Jens Dibbern,它对我有用。我不知道等待的部分。
【解决方案2】:

@Jens Dibbern 提供了一个可行的解决方案。但没有必要在搜索中提供公司的确切名称。发生的情况是,当您输入不准确的名称时,会弹出一个下拉菜单。

我观察到,除非存在此下拉菜单,否则 Enter 键不起作用。您可以通过访问该站点、粘贴名称来检查这一点,而无需等待尽快按回车键。什么都没有发生。

您也可以等待此下拉菜单显示,然后发送回车键。这也很有效。请注意,如果存在多个,最终将选择下拉菜单中的第一个项目。

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多