无法使用python selenium选择任何类型的选择器页面上的元素

时间:2017-09-08 22:48:21

标签: python selenium

我试图简单地填写登录表单,但无论我尝试多少我都不能。我正在尝试两天与各种选择器,没有。这是我的代码:

# -*- coding: iso-8859-2 -*-
from __future__ import print_function
import pyautogui, sys
import time
import random
import subprocess
import os
import urllib
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.keys import Keys

options = webdriver.ChromeOptions() 
options.add_argument("user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data") #Path to your chrome profile
options.add_argument("disable-infobars")
options.add_argument("--start-maximized")
driver = webdriver.Chrome(executable_path="C:\\chromedriver.exe", chrome_options=options)
driver.get("https://awario.com/login?r=%2F")
wait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='loginform-email']"))).click
wait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='loginform-email']"))).send_keys('email')
wait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='loginform-password']"))).send_keys('pass')

2 个答案:

答案 0 :(得分:0)

建议您使用selenium server方式在本地运行和调试脚本作为指南:http://selenium-python.readthedocs.io/getting-started.html#using-selenium-with-remote-webdriver

运行selenium服务器的控制台窗口将打印出浏览器上所有操作的日志,如下所示:

INFO - Executing: [find elements: By.cssSelector: a[ng-if*="uxdRegion"]])
INFO - Done: [find elements: By.cssSelector: a[ng-if*="uxdRegion"]]
INFO - Executing: [get element attribute: 0 [ 
        css selector: a[ng-if*="uxdRegion"]], href])
INFO - Done: [get element attribute: 0 [] -> 
        css selector: a[ng-if*="uxdRegion"]], href]

当遇到异常时停止运行并打印出日志。 从日志中,您可以很容易地知道脚本中的哪一步失败和失败的原因。

仅供参考,在上述脚本中使用selenium的方式,称为' directconnect'。

答案 1 :(得分:0)

我尝试了你的xpath" // * [@ id =' loginform-email']"在我的笔记本电脑上的登录页面上,浏览器大小正常,它会找到3个匹配的元素。

第一个和第二个不可见,它们用于小浏览器大小,如 在移动设备上打开您的网站。只有第三个在我尝试中可见。

对于硒,不可见元素始终不可点击。

在你的脚本中你使用了api:EC.element_to_be_clickable(),因为有多个匹配元素,它将使用第一个不可见的元素, 相当于不可点击,因此EC.element_to_be_clickable()不应该返回 下一次点击的任何元素。

您可以尝试使用更严格的定位器,如下面的代码在桌面上使用maixmize浏览器大小来验证我的答案是否正确。

css_locator_email =" .top-index-section + div#loginform-email"
wait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,css_locator_email)))。click();