因須要收集頁面數據,遂準備使用selenium爬取瓦斯閱讀頁面,html
瓦斯網站使用的是ant design,元素定位很是困難,頁面元素都沒有ID,如今還只是能作到操做登陸,不能自動打開訂閱,查詢某公衆號,git
下面的代碼能實現打開登陸窗,自動填寫用戶名密碼登陸,其中那個登陸按鈕也是找不到元素的,使用的辦法是先獲取當前活動的元素,再經過發送TAB和ENTER鍵完成對「登陸」點擊操做的:github
1 # 瓦斯的查詢url 2 url = 'https://w.qnmlgb.tech' 3 4 # 經過 get 方法打開查詢頁 5 driver.get(url) 6 7 # 登陸操做 8 loginXpath = '//*[@id="root"]/div/div/div/div[1]/div/div[2]/span' 9 loginPage = driver.find_element_by_xpath(loginXpath).click() 10 loginEmail = '//*[@id="username"]' 11 loginPwd = '//*[@id="password"]' 12 loginEmailInput = driver.find_element_by_xpath(loginEmail) 13 loginPwdInput = driver.find_element_by_xpath(loginPwd) 14 15 loginEmailInput.send_keys('username') 16 loginPwdInput.send_keys('password') 17 WebDriverWait(driver, 30) 18 loginPwdInput.send_keys(Keys.TAB) 19 loginPwdInput.send_keys(Keys.ENTER) 20 WebDriverWait(driver, 30) 21 loginButtonXpath = '/html/body/div[3]/div/div/div/div[2]/div/div/div/form/div[3]/div/div/span/button' 22 loginButtonSelector = 'body > div:nth-child(9) > div > div > div > div.user-status-inner > div > div > div > form > div:nth-child(3) > div > div > span > button' 23 driver.switch_to.active_element.send_keys(Keys.TAB) 24 driver.switch_to.active_element.click() 25 WebDriverWait(driver, 30) 26 #driver.save_screenshot('searchtab.png')
最終實現效果是這樣的:chrome
而真實的頁面應該是這樣的:瀏覽器
是的,右邊那一塊在無頭瀏覽器狀態下貌似沒法加載,至少我還沒找到好的辦法,而用普通模式,則會報錯,網站
selenium.common.exceptions.ElementNotVisibleException: Message: element not interactableui
其中頁面焦點元素獲取的方法能夠參考這裏:https://huilansame.github.io/huilansame.github.io/archivers/switch-to-active-elementurl
若有好的辦法歡迎留言討論,謝謝,spa
--------------------------更新2019-1-31 15:20:22-----------------------------------code
終於解決了前面提到的感受頁面沒加載完的問題,
chromedriver打開頁面時默認的分辨率爲「{'width': 800, 'height': 600}」,有些頁面可能由於元素定位設置不是相對自適應的,此時這個分辨率就不足以顯示所有頁面,因此經過設置分辨率來顯示所有內容,
# 瀏覽器最大化 driver.maximize_window() # 設置分辨率 driver.set_window_size(1280,800)
這樣所有頁面就能夠顯示出來了,底部的元素能夠經過定位滾動條使目標元素位於中央,