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
。
答案 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')
如果这回答你的问题,请告诉我。