2016-12-08 13 views
0

ユーザーからの入力を受け取り、その入力を自分のGmailアカウントで検索し、送信者からすべてのボックスをチェックするコードを作成しようとしています入力と同じです。Python Selenium - Webdriverが前のページのデータとやりとりする

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を、それがクエリで検索している新しいページを示していますがが、コードがページと対話する場合、それは前のものと相互作用することである: はここに私のコードです。

私は暗黙の待ちを入れようとしました。現在のURLをチェックすると、新しいURLが表示されます。

答えて

0

問題は、これは単一ページのアプリケーションなので、セレンは新しいデータが読み込まれるのを待たないということです。あなたは、検索結果が戻ってくるのを待つ方法を見つけ出す必要があります。上に表示される「読み込み中...」に基づいているのか、最初の結果が変わるのを待っているのか、

0

最初のページから要素を取り出して、それが古くなるのを待ちます。それは、ページが読み込まれていることを伝えます。次に、必要な要素を待ちます。これは、ページがリロードされ、元のページを動的ページで参照していないことを確認する唯一の方法です。

古くなるのを待つ場合はstaleness_ofhttp://selenium-python.readthedocs.io/waits.htmlとしてください。

関連する問題