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

2024-09-29 19:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个网页刮,这是由硒从另一个网页打开。在

我用Selenium在一个网站上输入了一个搜索词,这让我进入了一个新页面。我的目标是用这个新页面来制作汤。但是,soup是从我输入搜索词的前一页创建的。救命啊!在

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)

Tags: fromimportsend网页sourcedriverseleniumkeys
2条回答

jen@berns给出了可行的解决方案。但没有必要在搜索中提供公司的确切名称。当你输入一个不精确的名字时,会弹出一个下拉列表。在

enter image description here

我观察到,除非出现此下拉列表,否则enter键不起作用。您可以通过访问站点,粘贴名称并尽快按enter键来检查。什么也没发生。在

您也可以等待此下拉列表可见,然后发送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)

你需要知道执行公司的名字以便搜索。使用send_键之后,您尝试检查元素是否过时。我不明白那句话应该怎么说。我为新页面的一个元素添加了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

您应该添加异常处理。在

相关问题 更多 >

    热门问题