用selenium 驱动chrome寻找某些元素时找不到 网站是一个课程学习平台

我通过selenium登录网站后想开始自动化点击网页的一些按钮,通过xpath定位,却找不到
图片描述

代码如下(账号密码不重要,需要登录才可以进入课程,留下方便大家帮忙调试)

from selenium import webdriver
import time

# 创建chrome参数对象
opt = webdriver.ChromeOptions()

# 把chrome设置成无界面模式,不论windows还是linux都可以,自动适配对应参数
#opt.set_headless()

# 创建chrome无界面对象
driver = webdriver.Chrome(options=opt)

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

#打印内容
#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)
# 点击继续学习按钮
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子类的来加载,但是我不会,麻烦大家帮忙看一下,给出解决的方法,谢谢!

阅读 5.4k
3 个回答

自己写 xpath 比较准确,用 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()

# 点击继续学习按钮
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()

本机:chrome 64 python2.7 selenium3.8
给你试了下headless模式下,登录后,系统检测浏览器版本太低或不兼容,所以定位不准 。
如下图
图片描述

你可以尝试在登录后截图看下

截图

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

# 点击继续学习按钮
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();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题