2017-07-11 111 views
1
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所有其他定位器。

+2

试试'browser.maximize_window()'全屏打开浏览器窗口 – Andersson

回答

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') 

让我知道如果这个回答你的问题。

+0

谢谢,它工作。我会试图弄清楚它的工作原理。 – Newbbit

+0

@Newbbit大新闻!!!很高兴能够帮助你。谢谢 – DebanjanB

0

如果您使用绝对路径,那么您可以在文本框中发送文本。

下面的代码会做

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') 
+0

谢谢,这个解决方案也很好。 – Newbbit

0

你的问题应该通过一个简单的代码行,你需要包括

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选择器的信息,并在代码中更频繁地使用它们。

+0

使用“驱动程序”和“浏览器”是否有区别?当我使用“驱动程序”时,它以红色标出,给我一个错误。 – Newbbit

+0

您可以使用'browser'而不是驱动程序。 – demouser123