2016-08-04 124 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 

希望对你有所帮助 谢谢。!!