爬虫----selenium和xpath的使用

selenium

淘宝镜像中下载指定的chromedriver,windwos的用户将其放在 虚拟环境的scripts或者python3的环境文件中,总之要和python.exe同级目录,Linux和Mac用户放入/usr/local/bin目录下

selenium入门

pip install selenium

from selenium import webdirver

driver = webdriver.Chrome()  # 创建一个Chrome的driver实例对象

# 访问人人登录页面
driver.get(url="http://www.renren.com/")

# 填写用户名和密码
driver.find_element_by_id("email").send_keys("xxx")
driver.find_element_by_id("password").send_keys("xxx")

# 点击登陆
driver.find_element_by_id("login").click()

# 退出
driver.quit()
  • driver.page_source网页源码
  • driver.current_url 当前网页的url

selenium处理cookie

通过driver.get_cookies()能够获取所有的cookie

# 把cookie转化为字典
{cookie['name']: cookie['value'] for cookie in driver.get_cookies()}

#删除一条cookie
driver.delete_cookie("CookieName")
# 删除所有的cookie
driver.delete_all_cookies()

selenium定位元素

# 通过xpath定位元素
driver.find_element_by_xpath("//a")

# 通过链接文字定位
driver.find_element_by_link_text("下一页")

# 通过包含得链接文字定位元素
driver.find_element_by_partial_link_text("下一")

# 通过标签名定位
driver.find_element_by_tag_name("a")
  • find_element 返会一个Element对象,如果没找到,报错
  • find_elements 返回一个列表,元素项时Elements,如果没找到,返回空列表

**find_element_by_xpath() 或者find_element_by_xpath()中传入得xpath表达式只能定位到标签 ** ,如果需要获取指定element的文本或者属性值:

  • elelemt.text 获取文本
  • element.get_attribute("") 获取属性内容

切换iframe

网页存在iframe嵌套架构,如果要查找的标签在指定的iframe里面,必须先切换到iframe中才能正确找到

driver.switch_to.frame() 可以传入iframe的id、name、element对象

验证的判断

flask的项目中的验证码逻辑:

  1. 前端js产生一个UUID,发起图片验证码请求时带上UUID参数
  2. 后端随机生成一个code,以UUID:code的形式存入Redis数据库中
  3. 前端POST请求提交验证时,需要携带UUID,后端从redis中读取指定的code和用户输入的进行对比验证

传统的验证码请求方式:

  1. 请求网页登陆页面的时候,服务器为当前用户开辟session空间,并向浏览器的cookies中写入一个seesion_id
  2. 浏览器请求验证码验证码图片时会自动携带cookies,seesion_id 会被提交到服务器 ,后端产生随机的code 放入sesion_id指定的sesion空间中
  3. 前端发起提交验证的 post请求时,也会自动携带cookie,seesion_id 会再次被提交到服务器 ,后端根据session_id在指定的sesion空间中找出曾经存入的code,和前端提交的进行对比验证

此种情况下,应考虑使用requests.session()来进行验证码突破

猜你喜欢

转载自blog.csdn.net/weixin_44090435/article/details/86499531