python selenium元素不可见

时间:2017-07-11 15:28:14

标签: python selenium

import webbrowser
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.suntrust.com/')
browser.implicitly_wait(10)
elem = browser.find_element_by_xpath('//*[@id="sign-on-3A69E29D-79E0-403E-
                                     9352-5261239ADD89-user"]')
elem.send_keys('your-username')

我有两个问题:

1)窗口没有全屏打开,这意味着用户名字段在物理上不可见。如何在新选项卡中打开网址而不是新窗口。

2)其他帖子表明该元素是由JavaScript伪造的,因此webdriver无法看到它。

我在所有其他定位器中尝试了find_element_by

3 个答案:

答案 0 :(得分:1)

您的问题应该通过您需要包含的简单代码来回答

browser.maximize_window()

会最大化你的窗口。另一种选择是设置特定的窗口大小,如

driver.set_window_size(1280, 1024)

您可以使用两者来实现浏览器打开到最大大小。

我要提出的另一点是,如果您是初学者,请尝试使用更多CSS Selectors代替Xpath。它们比Xpath快得多。请参阅SQA上详细的post关于什么是一个好的定位器。

对于您的情况,登录字段的CSS选择器将是

driver.find_element_by_css_selector('input#sign-on-3A69E29D-79E0-403E-9352-5261239ADD89-user')

对于密码,它将是

driver.find_element_by_css_selector('input#sign-on-3A69E29D-79E0-403E-9352-5261239ADD89-password')

对于登录按钮,它将是

driver.find_element_by_css_selector('button.suntrust-login-button')

请阅读有关CSS选择器的更多信息,并尝试在代码中更频繁地使用它们。

答案 1 :(得分:0)

如果使用绝对xpath,则可以在文本框中发送文本。

下面的代码就是这样做

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


browser = webdriver.Chrome()
browser.maximize_window() # to open full size window
browser.get('https://www.suntrust.com/')

# browser.implicitly_wait(10)
WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="sign-on-3A69E29D-79E0-403E-9352-5261239ADD89-user"]')))

elem = browser.find_element_by_xpath("//div[@id='suntrust-login-form-herosignon']/div[2]/form/div[1]/input[1]")
elem.send_keys('your-username')
elem1 = browser.find_element_by_xpath("//div[@id='suntrust-login-form-herosignon']/div[2]/form/div[2]/input[1]")
elem1.send_keys('your-password')

答案 2 :(得分:0)

以下是您的问题的答案:

您构建的xpath不是唯一的。 xpath与HTML DOM上的2个元素完全匹配。所以Selenium试图在第一个不可见的匹配元素上send_keys。因此错误element not visible。以下代码块中使用的xpath唯一标识User ID字段并发送文本:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
browser = webdriver.Chrome(chrome_options=options, executable_path="C:\\Utility\\BrowserDrivers\\chromedriver.exe")
browser.get('https://www.suntrust.com/')
browser.implicitly_wait(15)
elem = browser.find_element_by_xpath('//section[@role="main"]//input[@id="sign-on-3A69E29D-79E0-403E-9352-5261239ADD89-user"]')
elem.send_keys('your-username')

如果这回答你的问题,请告诉我。