我想从不同的网页上抓取一个由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)
发布于 2019-01-26 19:08:40
您需要知道可执行的公司名称以进行搜索。在使用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
您应该添加异常处理。
发布于 2019-01-26 20:21:41
@Jens Dibbern给出了一个可行的解决方案。但在查册过程中,并不一定要提供公司的确切名称。发生的情况是,当您键入一个不精确的名称时,会弹出一个下拉列表。
我观察到,除非出现此下拉菜单,否则enter键不起作用。您可以通过转到站点,粘贴名称并尽快按回车键来检查这一点。什么都没发生。
您也可以等待此下拉菜单可见,然后发送enter key.This也可以完美地工作。请注意,如果存在多个项目,这将最终选择下拉列表中的第一个项目。
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)
https://stackoverflow.com/questions/54377162
复制相似问题