鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python  HTML/ 用selenium 驅(qū)動chrome尋找某些元素時找不到 網(wǎng)站是一個課程學(xué)習(xí)平臺

用selenium 驅(qū)動chrome尋找某些元素時找不到 網(wǎng)站是一個課程學(xué)習(xí)平臺

我通過selenium登錄網(wǎng)站后想開始自動化點擊網(wǎng)頁的一些按鈕,通過xpath定位,卻找不到
圖片描述

代碼如下(賬號密碼不重要,需要登錄才可以進(jìn)入課程,留下方便大家?guī)兔φ{(diào)試)

from selenium import webdriver
import time

# 創(chuàng)建chrome參數(shù)對象
opt = webdriver.ChromeOptions()

# 把chrome設(shè)置成無界面模式,不論windows還是linux都可以,自動適配對應(yīng)參數(shù)
#opt.set_headless()

# 創(chuàng)建chrome無界面對象
driver = webdriver.Chrome(options=opt)

driver.get('https://www.ulearning.cn/umooc/user/login.do')

#打印內(nèi)容
#print(driver.page_source)
# 用戶名
user = driver.find_element_by_xpath('//*[@id="loginName"]')
user.send_keys('20164045033')
# 用戶密碼
password = driver.find_element_by_xpath('//*[@id="password"]')
password.send_keys('dk154310')
# 登錄按鈕
bt = driver.find_element_by_xpath('//*[@id="loginForm"]/input[3]').click()
print(driver.page_source)

#print(driver.get_cookies())
# cookies = {
# 'domain': 'www.ulearning.cn',
#     'httpOnly': False,
#     'name': 'staticCookie',
#     'path': '/ulearning_web',
#     'secure': True,
#     'value': '1'
# }
#

# 等待頁面加載
time.sleep(3)
# 點擊繼續(xù)學(xué)習(xí)按鈕
learn = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div/div[1]/div[1]/div/div/div/section[1]/div[2]/div[1]/div[5]/input').click()
time.sleep(10)
test = driver.find_element_by_xpath('//*[@id="page559654"]/div/div/span').click()

就是最后一行的元素找不到,感覺是用了javascript子類的來加載,但是我不會,麻煩大家?guī)兔匆幌?,給出解決的方法,謝謝!

回答
編輯回答
妖妖

本機(jī):chrome 64 python2.7 selenium3.8
給你試了下headless模式下,登錄后,系統(tǒng)檢測瀏覽器版本太低或不兼容,所以定位不準(zhǔn) 。
如下圖
圖片描述

你可以嘗試在登錄后截圖看下

截圖

driver.get_screenshot_as_file(time.strftime("%Y%m%d%H%M%S") + ".png")

2017年7月24日 23:48
編輯回答
熟稔

自己寫 xpath 比較準(zhǔn)確,用 css 可能更簡潔,請參考文檔

  1. css, https://saucelabs.com/resourc...
  2. xpath, https://www.w3schools.com/xml...

以下是參考代碼,已測

# -*- coding: utf-8 -*-
from selenium import webdriver
import time


driver = webdriver.Chrome()
driver.get('https://www.ulearning.cn/umooc/user/login.do')

# 用戶名
user = driver.find_element_by_xpath('//*[@id="loginName"]')
user.send_keys('20164045033')
# 用戶密碼
password = driver.find_element_by_xpath('//*[@id="password"]')
password.send_keys('dk154310')
# 登錄按鈕
bt = driver.find_element_by_xpath('//*[@id="loginForm"]/input[3]').click()

# 點擊繼續(xù)學(xué)習(xí)按鈕
time.sleep(3)
driver.find_element_by_css_selector('div.progress_bg div.right input').click()

time.sleep(3)
driver.find_element_by_css_selector('button.btn-hollow').click()

time.sleep(3)
driver.find_element_by_css_selector('div.close-btn').click()

time.sleep(1)
items = driver.find_elements_by_css_selector('div.page-icon + span')
items[1].click()

time.sleep(1)
driver.find_element_by_css_selector('#alertModal .modal-operation .btn-submit').click()

# 播放視頻
time.sleep(1)
driver.find_element_by_css_selector('.jwdisplayIcon .jwicon').click()
2017年1月21日 03:07
編輯回答
傲嬌范
# 點擊繼續(xù)學(xué)習(xí)按鈕
learn = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div/div[1]/div[1]/div/div/div/section[1]/div[2]/div[1]/div[5]/input').click()

這個改成:

learn = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div/div[1]/div[1]/div/div/div/section[1]/div[2]/div[1]/div[5]/input');
learn.click();
2017年10月28日 07:54