selenium模块的基本使用:
问题:selenium模块与爬虫之间具有怎样的关联?
- 便捷的获取网站中动态加载的数据
- 便捷的实现模拟登陆
什么是selenium模块
- 基于浏览器自动化的一个模块。
selenium使用流程:
- pip install selenium
- 下载一个浏览器的驱动程序
-实例化一个浏览器对象
-编写基于浏览器自动化的操作代码
-发起请求:get(url)
-标签定位:find系列的方法
-标签交互:send_keys('xxx')
-执行js程序:excute_script('jsCode')
-前进,后退:forword(),back()
-关闭:quit()
-selenium处理iframe
-如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)
-动作链(拖动):from selecnium.webdriver import ActionChains
-实例化一个动作链对象:action=ActionChains(bro)
- click_and-hold(div):长按且点击操作
- move_by_offset(x,y)
- perform()让动作链立刻执行
- action.release()释放动作链对象
from selenium import webdriver
from lxml import etree
from time import sleep
#实例化一个浏览器对象,传入驱动
bro=webdriver.Chrome(executable_path='./chromedriver.exe')
#让浏览器发起一个直到url对应请求
bro.get('http://scxk.nmpa.gov.cn:81/xk/')
#page_source获取浏览器当前页面的页面源码数据
page_text=bro.page_source
#解析企业实际class[dzpzmain]/div/ul[2]/li/dl
tree=etree.HTML(page_text)
li_list=tree.xpath('//ul[@id="gzlist"]/li')
for li in li_list:
name=li.xpath('./dl/@title')[0]
print(name)
sleep(5)
bro.quit()
from selenium import webdriver
from lxml import etree
from time import sleep
bro=webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://www.taobao.com/')
#标签定位:
search_input=bro.find_element_by_id('q')
#标签交互:
search_input.send_keys('许佳琪同款')
#执行一组js程序
#bro.execute('window.scrollTo(0,document.body.scrollHeight)')
#sleep(2)
#点击搜索按钮
btn=bro.find_element_by_css_selector('.btn-search')
btn.click()
bro.get('https://baidu.com')
sleep(2)
#回退
bro.back()
#前进
bro.forward()
sleep(5)
控制css的加载:for.set_preference(“premissions.default.stylesheet”,2)
控制图片文件的显示:for.set_preference(“premissions.default.image”,2)
控制Javascript的运行:for.set_preference(“Javascript.enabled”,False)
from selenium import webdriver
from time import sleep
#导入动作链
from selenium.webdriver import ActionChains
bro=webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
#如果定位的标签是存在于iframe标签之中的则必须通过如下操作在标签进行标签定位
bro.switch_to_frame('iframeResult')#切换浏览器标签定位的作用域
div=bro.find_element_by_id('draggable')
#动作链
action=ActionChains(bro)
#点击长按指定的标签
action.click_and_hold(div)
for i in range(5):
#perform()立即执行动作链操作
#x表示水平方向,y表示垂直方向
action.move_by_offset(17,0).perform()
sleep(0.3)
#释放动作链
action.release()
print(div)
bro.quit()