2017-07-11 66 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