首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Selenium已经打开的网页中抓取BeautifulSoup

从Selenium已经打开的网页中抓取BeautifulSoup
EN

Stack Overflow用户
提问于 2019-01-26 17:29:06
回答 2查看 600关注 0票数 2

我想从不同的网页上抓取一个由Selenium打开的网页。

我在一个使用Selenium的网站上输入了一个搜索词,这让我进入了一个新的页面。我的目标是在这个新页面上创建一道汤。但是,汤是从我输入搜索词的前一页创建的。请帮帮我!

代码语言:javascript
运行
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-26 19:08:40

您需要知道可执行的公司名称以进行搜索。在使用send_keys之后,您尝试检查元素的陈旧。我不明白这句话是如何工作的。我为新页面的一个元素添加了WebDriverWait。

下面是我在获取页面源代码之前对selenium部分所做的工作:

代码语言:javascript
运行
复制
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

您应该添加异常处理。

票数 3
EN

Stack Overflow用户

发布于 2019-01-26 20:21:41

@Jens Dibbern给出了一个可行的解决方案。但在查册过程中,并不一定要提供公司的确切名称。发生的情况是,当您键入一个不精确的名称时,会弹出一个下拉列表。

我观察到,除非出现此下拉菜单,否则enter键不起作用。您可以通过转到站点,粘贴名称并尽快按回车键来检查这一点。什么都没发生。

您也可以等待此下拉菜单可见,然后发送enter key.This也可以完美地工作。请注意,如果存在多个项目,这将最终选择下拉列表中的第一个项目。

代码语言:javascript
运行
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54377162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档