Python Selenium - Webdriver与上一页

时间:2016-12-08 19:47:02

标签: python selenium web-scraping

我正在尝试创建一段代码,该代码从用户处获取输入并在其gmail帐户中搜索该输入,然后检查发件人中与输入相同的所有框。 这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
from selenium.webdriver import Remote
from selenium.webdriver.support.ui import WebDriverWait
import urllib

driver = webdriver.Chrome('D:/chromedriver_win32/chromedriver.exe')

driver.get("http://www.gmail.com")

elem = driver.find_element_by_id('Email')
elem.send_keys("****************")
elem2 = driver.find_element_by_id('next')
elem2.send_keys(Keys.ENTER)
driver.maximize_window()
driver.implicitly_wait(20)

elem3 = driver.find_element_by_name('Passwd')

elem3.send_keys("*************")

driver.find_element_by_id('signIn').send_keys(Keys.ENTER)

driver.implicitly_wait(20)

inp = 'randominput'

driver.find_element_by_name('q').send_keys(inp)
driver.find_element_by_css_selector('button.gbqfb').send_keys(Keys.ENTER)

x = driver.current_url

for i in driver.find_elements_by_css_selector('.zA.zE'):
print(i.find_element_by_class_name('zF').get_attribute('name'))
if(i.find_element_by_class_name('zF').get_attribute('name') == inp):
    i.find_element_by_css_selector('.oZ-jc.T-Jo.J-J5-Ji').click()

这个主要问题是虽然webdriver显示了搜索查询的新页面,但是当代码与页面交互时,它会与之前的页面进行交互。

我尝试过隐式等待。当我检查当前网址时,它会显示新的网址。

2 个答案:

答案 0 :(得分:0)

问题是这是一个单页应用程序,因此selenium不会等待加载新数据。您需要找到一种等待搜索结果返回的方法。是否基于“正在加载......”。出现在顶部,甚至只是等待第一个结果改变。

答案 1 :(得分:0)

从第一页抓取一个元素并等待它变得陈旧。这将告诉您页面正在加载。然后等待你想要的元素。这是确保页面重新加载的唯一方法,并且您没有使用动态页面引用原始页面。

要等待陈旧,请参阅http://selenium-python.readthedocs.io/waits.html上的staleness_of