selenium可以用来完成浏览器自动化相关的操作,写一些代码制定一些基于浏览器自动化的相关操作(行为动作),当代码执行后,浏览器就会自动触发相关的事件
安装方法:
- pip install selenium
- 下载对应浏览器的驱动程序
- 谷歌浏览器驱动下载地址:
https://chromedriver.storage.googleapis.com/index.html
- 根据浏览器版本选择对应的驱动版本(网上查)
代码流程:
- 导入模块:from selenium import webdriver
- 实例化一个浏览器对象:webdriver.Chrome(executable_path=\'./chromedriver.exe\') ,参数为浏览器驱动路径;
- 写上要访问的网址:bro.get("https://xueqiu.com/")
浏览器相关操作:
执行js实现滚轮向下
移动到页面最底部(如果是动态加载的数据及第一次加载完成的地方):
js = "window.scrollTo(0,document.body.scrollHeight)"
定位标签,向标签里写参数
tag_input = bro.find_element_by_id(\'kw\')
tag_input.send_keys(\'人民币\')
截屏
bro.save_screenshot(\'1.png\')
获取页面数据
获取动态加载的数据:bro.page_source
基于xpath获取标签:a_tag = bro.find_element_by_xpath("xpath表达式")
点击事件:a_tag.click() 单击鼠标左键一下
网页的前进和后退
bro.back() 后退
bro.forward() 前进
谷歌无头浏览器
如不想感知到浏览器操作,可让浏览器在后台操作
#谷歌无头浏览器 from selenium import webdriver from time import sleep from selenium.webdriver.chrome.options import Options # 创建一个参数对象,用来控制chrome以无界面模式打开 chrome_options = Options() chrome_options.add_argument(\'--headless\') chrome_options.add_argument(\'--disable-gpu\') bro = webdriver.Chrome(executable_path=\'./chromedriver.exe\',options=chrome_options) bro.get(\'https://www.baidu.com\') sleep(2) bro.save_screenshot(\'1.png\') #标签定位 tag_input = bro.find_element_by_id(\'kw\') tag_input.send_keys(\'人民币\') sleep(2) btn = bro.find_element_by_id(\'su\') btn.click() sleep(2) print(bro.page_source) bro.quit()
动作链
如果定位的标签存在于iframe标签之中,则必须经过switch_to操作在进行标签定位
#动作链 from selenium import webdriver from time import sleep from selenium.webdriver import ChromeOptions from selenium.webdriver import ActionChains option = ChromeOptions() option.add_experimental_option(\'excludeSwitches\', [\'enable-automation\']) bro = webdriver.Chrome(executable_path=\'./chromedriver.exe\',options=option) url = \'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable\' bro.get(url=url) #如果定位的标签存在于iframe标签之中,则必须经过switch_to操作在进行标签定位 bro.switch_to.frame(\'iframeResult\') source_tag = bro.find_element_by_id(\'draggable\') taget_tag = bro.find_element_by_id(\'droppable\') #创建一个动作连的对象 action = ActionChains(bro) action.drag_and_drop(source_tag,taget_tag) action.perform() sleep(3) # bro.quit()