Selenium基础学习
直接模拟浏览器的行为。浏览器能请求到的,使用selenium也能请求到。爬虫更稳定。
首先下载 chromedriver 版本号要和自己谷歌浏览器版本一致
快速简易selenium项目
# chromdriver 得版本一定要和浏览器版本一样
import os
from selenium import webdriver
import time
# 获取chrome drive地址
file = os.path.join(os.path.dirname(__file__), 'chromedriver.exe')
driver = webdriver.Chrome(file)
# driver.get() 打开时网页
driver.get('https://www.baidu.com')
# close()关闭当前的窗口
# driver.close()
# 退出驱动关闭所有窗口
driver.quit()
定位元素
讲取两种方式
from selenium import webdriver
import os
from selenium.webdriver.common.by import By
file = os.path.join(os.path.dirname(__file__), 'chromedriver.exe')
driver = webdriver.Chrome(file)
driver.get('https://www.baidu.com')
"""
elements 寻找符合的所有
driver.find_elements()
element 寻找符合的一个
driver.find_elements_by_id()
send_keys() 是往输入框输入数据
click() 是点击按钮
"""
# 寻找id
# driver.find_element_by_id('kw').send_keys('python')
# driver.find_element(By.ID, 'kw').send_keys('python')
# 查询类名
# driver.find_element_by_class_name('s_ipt').send_keys('java')
# driver.find_element(By.CLASS_NAME, 's_ipt').send_keys('jerry')
# 寻找name
# driver.find_element_by_name('wd').send_keys('chen')
# driver.find_element(By.NAME, 'wd').send_keys('chen')
# 根据标签查找元素 通过标签名字去定位 用的不多
# driver.find_element_by_tag_name('head')
# driver.find_element(By.TAG_NAME, 'head')
# 通过xpath来定位
# driver.find_element_by_xpath('//input[@id="kw"]').send_keys('java')
# driver.find_element(By.XPATH,)
# 通过css选择器
# driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('hello')
# clear 清空输入的内容
driver.find_element_by_id('su').click()
操作下拉框
import time
import os
from selenium import webdriver
# 需要导入这一个框
from selenium.webdriver.support.ui import Select
file = os.path.join(os.path.dirname(__file__), 'chromedriver.exe')
driver = webdriver.Chrome(file)
# 这个网址他的网页源代码是嵌套的所以需要先转换到下拉选择框在的网址
url = 'https://www.17sucai.com/pins/demo-show?id=5926'
driver.get(url)
# 切换
# 第一种过时了 转换下拉选择框的网址
# driver.switch_to_frame(driver.find_element_by_id('iframe'))
driver.switch_to.frame(driver.find_element_by_id('iframe'))
# selenium.webdriver.support.ui先导入这个包 import Select
# 实例化Select对象
selectTag = Select(driver.find_element_by_class_name('nojs'))
# 这样是不可以的
# selectTag = driver.find_element_by_class_name('nojs')
# 1 根据值查找
selectTag.select_by_value('JP')
# 2 根据索引值来选择
time.sleep(2)
selectTag.select_by_index(3)
现在实现一个小案例
"""
模拟登录豆瓣
"""
import time
import os
from selenium import webdriver
file = os.path.join(os.path.dirname(__file__), 'chromedriver.exe')
driver = webdriver.Chrome(executable_path=file)
url = 'https://douban.com'
driver.get(url)
# 切换登录方式 短信登录和密码登录
# 因为包裹了所以要先切换网址
driver.switch_to.frame(driver.find_element_by_tag_name('iframe'))
driver.find_element_by_class_name('account-tab-account').click()
time.sleep(2)
# 填写登录信息
driver.find_element_by_id('username').send_keys('xxxx')
driver.find_element_by_id('password').send_keys('xxxx')
# 点击按钮登录
# 因为类名可以同时存在两个 空格就是代表有两个所以只能取一个或者xpath
driver.find_element_by_class_name('btn-active').click()
selenium学习下 https://blog.csdn.net/zhangfanweilai/article/details/113916624