2016-08-04 122 views
0

我只想寫一個簡單的登錄腳本蘋果網站: Sign In無法找到網頁元素

的ID和密碼錶單無法正確定位。 其實,我嘗試了很多的東西,如:

driver.find_element_by_xpath("//*[@type='email']") 

driver.find_element_by_xpath("//*[@name='login-appleId']") 

driver.find_element_by_xpath("//*[@id='login-appleId']") 

我沒有找到這個頁面的Iframe。並且我爲顧客結帳按鈕嘗試了同樣的事情,同樣的問題也發生了。

任何建議將不勝感激!

最佳, 盧克

+1

問題是,你應該給予足夠的時間來加載網頁。有一個關於Implisit等待和Explecit等待的理論。試試吧,它需要一些時間來等待元素被加載到瀏覽器窗口。或者你可以使用Thread.sleep(),這是不推薦的方法。 –

+0

打開頁面後試試'time.sleep(few_seconds)',這應該有幫助 – micgeronimo

回答

0

我建議你嘗試以下方法:

driver.find_element_by_id("login-appleId") 
driver.find_element_by_id("login-password") 
0

有時WebDriver存在其中WebElement沒有正確地裝上DOM和webdriver的試圖尋找它的場景。所以爲了處理這種場景,有WebDriver庫提供的兩種類型的等待。

您只需根據您的要求實施其中一項。

  1. Implicit Waits
  2. Explicit Waits

我建議你實現其中之一,然後嘗試執行腳本。

+0

它並不總是像你期望的那樣工作,通常'time.sleep(some_seconds)'已經足夠了 – micgeronimo

+0

'time.sleep(some_seconds)'也是有一些缺點。它會阻止您的UI線程獲取您在參數中提到的確切時間。可以說你給了等待時間60秒,並且元素在1秒內加載,然後線程停止整個60秒,而隱式等待或顯式等待則不是這種情況。 – Paras

1

您可以按照此代碼..它的工作..!

from selenium import webdriver 
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.Chrome('E:\chromedriver.exe') #location 
driver.get('url') #https://secure2.store.apple.com/shop/sign_in?c=aHR0cDovL3d3dy5hcHBsZS5jb20vc2hvcC9iYWd8MWFvczVjNGU3ZWNjZjgwODVjNWY4NDk0OTA0ODJhMDc2Y2FkNmU3ODJkOTE&o=O01LV0gy&r=SXYD4UDAPXU7P7KXF&s=aHR0cHM6Ly9zZWN1cmUyLnN0b3JlLmFwcGxlLmNvbS9zaG9wL2NoZWNrb3V0L3N0YXJ0P3BsdG49RkNBRjZGQjR8MWFvczAyZmZkZjQwNTgwOGI4ZTNkMDQ5MWRiM2NmZmExYTgxNzRkZTllMjY&t=SXYD4UDAPXU7P7KXF&up=t 

def find_by_xpath(locator): 
    element = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.XPATH, locator)) 
    ) 
    return element 
class FormPage(object): 
    def fill_form(self, data): 
     find_by_xpath('//input[@name = "login-appleId"]').send_keys(data['usr') 
     find_by_xpath('//input[@name = "login-password"]').send_keys(data['pwd']) 
     return self 

    def submit(self): 
     find_by_xpath('//input[@id = "sign-in"]').click() 

data = { 
     'usr': '[email protected]', 
     'pwd': 'xxxx' 
     } 

if __name__=="__main__": 
    FormPage().fill_form(data).submit() 
    driver.quit() # closes the webbrowser 

希望對你有所幫助 謝謝。!!