2017-07-12 98 views
0

我想在Python中使用Selenium登錄到網站,然後每天下載一些免費提供的信息,以監控它隨時間的變化。Python和硒登錄到網站

該網站有註冊和登錄彼此相鄰,並且都使用相同ID

我的代碼:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

browser = webdriver.Firefox() 
browser.get('http://www.acquirersmultiple.com/login/') 

#login_user = browser.find_element_by_css_selector('.rcp_login_data > p:nth-child(1) > input:nth-child(2)') 
username = browser.find_element_by_id("rcp_user_login") 
password = browser.find_element_by_id('rcp_user_pass') 

username.send_keys("SomeUser") 
password.send_keys("P4s5word") 

結果SomeUser的作爲用戶名在網站上的註冊字段,而不是登錄。

我試着選擇的CSS選擇器,沒有運氣那裏要麼。

回答

0

這是我如何做,當我沒有找到使用id或名稱的唯一元素。 轉到它的父文件夾,並檢查它是否唯一可識別,如果沒有找到它的父元素,就直接找到它。然後形成一個xpath。

對於你來說,usename和passwod的xpath將如下所示。

//form[@id='rcp_login_form']//*[@name='rcp_user_login'] 
//form[@id='rcp_login_form']//*[@name='rcp_user_pass'] 
2

登錄字段在登錄表單下。你可以找到的形式,並用它來定位領域

login_form = browser.find_element_by_id('rcp_login_form') 
username = login_form.find_element_by_id('rcp_user_login') 
password = login_form.find_element_by_id('rcp_user_pass') 

還是在定位

username = browser.find_element_by_css_selector('#rcp_login_form #rcp_user_login') 
password = browser.find_element_by_css_selector('#rcp_login_form #rcp_user_pass') 
+0

你的回答可以解決問題,但你不解釋原因。主要問題是,OP使用的ID在頁面上不唯一,並且找到與該ID匹配的第一個元素在Register New Account下。 – JeffC

+0

@JeffC OP已經在帖子中提到過它。我不認爲有任何意見再次發佈。 – Guy

+0

你是對的......我完全錯過了他的評論。 – JeffC

0

這裏使用的是回答你的問題:

您已經使用了定位id找到Subscriber Login部分中的元素UsernamePassword字段,但這些定位符在HTML DOM中不唯一。我們需要構建可識別元素的獨特xpath。您可以使用以下代碼塊:

from selenium import webdriver 
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary 

binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe') 
browser = webdriver.Firefox(firefox_binary=binary, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe") 
browser.get('http://www.acquirersmultiple.com/login/') 
browser.execute_script("window.scrollTo(0, 400);") 
username = browser.find_element_by_xpath("//form[@id='rcp_login_form']//input[@id='rcp_user_login']") 
password = browser.find_element_by_xpath("//form[@id='rcp_login_form']//input[@id='rcp_user_pass']") 
username.send_keys("SomeUser") 
password.send_keys("P4s5word") 

讓我知道這個答案是否是您的問題。

0

CSS選擇器的解決方案:

username = browser.find_element_by_css_selector("form#rcp_login_form input#rcp_user_login") 
password = browser.find_element_by_css_selector('form#rcp_login_form input#rcp_user_pass')