我正在尝试创建一段代码,该代码从用户处获取输入并在其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显示了搜索查询的新页面,但是当代码与页面交互时,它会与之前的页面进行交互。
我尝试过隐式等待。当我检查当前网址时,它会显示新的网址。
答案 0 :(得分:0)
问题是这是一个单页应用程序,因此selenium不会等待加载新数据。您需要找到一种等待搜索结果返回的方法。是否基于“正在加载......”。出现在顶部,甚至只是等待第一个结果改变。
答案 1 :(得分:0)
从第一页抓取一个元素并等待它变得陈旧。这将告诉您页面正在加载。然后等待你想要的元素。这是确保页面重新加载的唯一方法,并且您没有使用动态页面引用原始页面。
要等待陈旧,请参阅http://selenium-python.readthedocs.io/waits.html上的staleness_of
。