Python爬虫
selenium
## selenium 常用方法 webdriver.Chrome() 始化 Chrome 浏览器实例。 driver = webdriver.Chrome() driver.get(url) 访问指定的 URL 地址。 driver.get("https://example.com") driver.find_element(By, value) 查找第一个匹配的元素。 element = driver.find_element(By.ID, "id") driver.find_elements(By, value) 查找所有匹配的元素。 elements = driver.find_elements(By.CLASS_NAME, "class") element.click() 点击元素。 element.click() element.send_keys(value) 向输入框中发送键盘输入。 element.send_keys("text") element.text 获取元素的文本内容。 text = element.text driver.back() 浏览器后退。 driver.back() driver.forward() 浏览器前进。 driver.forward() driver.refresh() 刷新当前页面。 driver.refresh() driver.quit() 关闭浏览器并退出驱动。 driver.quit() driver.close() 关闭当前窗口。 driver.close() driver.execute_script(script, *args) 执行js脚本。 driver.execute_script("alert('Hello!')") driver.switch_to.frame(frame_reference) 切换到指定的iframe。 driver.switch_to.frame("frame_id") driver.switch_to.default_content() 切换回主文档。 driver.switch_to.default_content() ## 0. 准备工作 ##### 0.1. 安装selenium库 pip install selenium ##### 0.2. 安装浏览器驱动 Chrome: ChromeDriver https://developer.chrome.com/docs/chromedriver/downloads?hl=zh-cn Firefox: GeckoDriver https://github.com/mozilla/geckodriver/releases Edge: EdgeDriver https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/?form=MA13LH Safari: SafariDriver https://webkit.org/blog/6900/webdriver-support-in-safari-10/ 环境变量配置: 将对应的ChromeDriver的可执行文件chromedriver.exe文件拖到Python的Scripts目录下。 注:当然也可以不这样做,但是在调用的时候指定chromedriver.exe绝对路径亦可。 自动安装 自动安装需要用到第三方库webdriver_manager,先安装这个库,然后调用对应的方法即可。 from selenium import webdriver from selenium.webdriver.common.keys import Keys from webdriver_manager.chrome import ChromeDriverManager browser = webdriver.Chrome(ChromeDriverManager().install()) browser.get('http://www.baidu.com') search = browser.find_element_by_id('kw') search.send_keys('python') search.send_keys(Keys.ENTER) # 关闭浏览器 browser.close() ## 1. 基本用法 ##### 1.1. 初始化浏览器对象 from selenium import webdriver # 初始化浏览器为chrome浏览器 browser = webdriver.Chrome() # 指定绝对路径的方式 path = r'C:\Users\Gdc\.wdm\drivers\chromedriver\win32\96.0.4664.45\chromedriver.exe' browser = webdriver.Chrome(path) ##### 1.2. 访问页面 # 访问百度首页 browser.get(r'https://www.baidu.com/') # 截图预览 browser.get_screenshot_as_file('截图.png') ##### 1.3. 设置浏览器大小 # 设置浏览器大小:全屏 browser.maximize_window() browser.get(r'https://www.baidu.com') # 设置分辨率 500*500 browser.set_window_size(500,500) ##### 1.4. 刷新页面 browser.refresh() ##### 1.5. 前进后退 browser.back() browser.forward() ## 2. 获取页面基础属性 # 网页标题 print(browser.title) # 当前网址 print(browser.current_url) # 浏览器名称 print(browser.name) # 网页源码 print(browser.page_source) ## 3. 定位页面元素 browser.find_element(By.ID,'kw') browser.find_element(By.NAME,'wd') browser.find_element(By.CLASS_NAME,'s_ipt') browser.find_element(By.TAG_NAME,'input') browser.find_element(By.LINK_TEXT,'新闻') browser.find_element(By.PARTIAL_LINK_TEXT,'闻') browser.find_element(By.XPATH,'//*[@id="kw"]') browser.find_element(By.CSS_SELECTOR,'#kw') ## 4. 获取页面元素属性 ##### 4.1. get_attribute获取属性 logo = browser.find_element_by_class_name('index-logo-src') logo.get_attribute('src') logo.get_attribute('href') ##### 4.2. 获取文本 logo = browser.find_element_by_css_selector('#hotsearch-content-wrapper > li:nth-child(1) > a') print(logo.text) ##### 4.3. 获取其他属性 logo = browser.find_element_by_class_name('index-logo-src') print(logo.id) #id print(logo.location) #位置 print(logo.tag_name) #标签名 print(logo.size) #大小 ## 5. 页面交互操作 ##### 5.1. 输入文本 send_keys() input = browser.find_element_by_class_name('s_ipt') # 定位搜索框 input.send_keys('python') # 输入python ##### 5.2. 点击 click() click = browser.find_element_by_link_text('新闻') # 选中新闻按钮 click.click() # 点击之 ##### 5.3. 清除文本 clear() input.clear() ##### 5.4. 回车确认 submit() input.send_keys('python') input.submit() ##### 5.5. 单选 单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。 ##### 5.6. 多选 多选好像也比较容易,依次定位需要选择的元素,点击即可。 ##### 5.7. 下拉框 '''1、三种选择某一选项项的方法''' select_by_index() # 通过索引定位;注意:index索引是从“0”开始。 select_by_value() # 通过value值定位,value标签的属性值。 select_by_visible_text() # 通过文本值定位,即显示在下拉框的值。 '''2、三种返回options信息的方法''' options # 返回select元素所有的options all_selected_options # 返回select元素中所有已选中的选项 first_selected_options # 返回select元素中选中的第一个选项 ## 6. 多窗口切换 ##### 6.1. Frame切换 Selenium打开一个页面之后,默认是在父页面进行操作,此时如果这个页面还有子页面, 想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_to.frame()就来了。 如果想回到父页面,用switch_to.parent_frame()即可。 ##### 6.2. 选项卡切换 current_window_handle:获取当前窗口的句柄。 window_handles:返回当前浏览器的所有窗口的句柄。 switch_to_window():用于切换到对应的窗口。 # 打开百度 browser.get('http://www.baidu.com') # 新建一个选项卡 browser.execute_script('window.open()') print(browser.window_handles) # 跳转到第二个选项卡并打开知乎 browser.switch_to.window(browser.window_handles[1]) browser.get('http://www.zhihu.com') # 回到第一个选项卡并打开淘宝(原来的百度页面改为了淘宝) browser.switch_to.window(browser.window_handles[0]) browser.get('http://www.taobao.com') ## 7. 模拟鼠标操作 ##### 7.1. 左键 click() 这个其实就是页面交互操作中的点击click()操作 ##### 7.2. 右键 context_click() ActionChains(browser).context_click(right_click).perform() ActionChains(browser):调用ActionChains()类,并将浏览器驱动browser作为参数传入 context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数 perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作 ##### 7.3. 双击 double_click() ActionChains(browser).double_click(double_click).perform() ##### 7.4. 拖拽 drag_and_drop(source,target) ##### 7.5. 悬停 move_to_element() ## 8. 模拟键盘操作 send_keys(Keys.BACK_SPACE):删除键(BackSpace) send_keys(Keys.SPACE):空格键(Space) send_keys(Keys.TAB):制表键(TAB) send_keys(Keys.ESCAPE):回退键(ESCAPE) send_keys(Keys.ENTER):回车键(ENTER) send_keys(Keys.CONTRL,'a'):全选(Ctrl+A) send_keys(Keys.CONTRL,'c'):复制(Ctrl+C) send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X) send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V) send_keys(Keys.F1):键盘F1 ..... send_keys(Keys.F12):键盘F12 ## 9. 延时等待 ##### 9.1. 强制等待 就很简单了,直接time.sleep(n)强制等待n秒,在执行get方法之后执行。 ##### 9.2. 隐式等待 implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。 browser.implicitly_wait(10) ##### 9.3. 显式等待 设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常 # 设置等待时间10s wait = WebDriverWait(browser, 10) # 设置判断条件:等待id='kw'的元素加载完成 input = wait.until(EC.presence_of_element_located((By.ID, 'kw'))) WebDriverWait的参数说明: WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None) driver: 浏览器驱动 timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间) poll_frequency: 每次检测的间隔时间,默认是0.5秒 ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常 until(method,message='') method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False message: 如果超时,抛出TimeoutException,将message传入异常 until_not(method,message='') until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。 ## 10. 其他 ##### 10.1. 运行JavaScript ##### 10.2. Cookie # 知乎发现页 browser.get('https://www.zhihu.com/explore') # 获取cookie print(f'Cookies的值:{browser.get_cookies()}') # 添加cookie browser.add_cookie({'name':'才哥', 'value':'帅哥'}) print(f'添加后Cookies的值:{browser.get_cookies()}') # 删除cookie browser.delete_all_cookies() print(f'删除后Cookies的值:{browser.get_cookies()}' ##### 10.3. 反屏蔽
顶部
收展
底部
[TOC]
目录
requests
BeautifulSoup
selenium
Scrapy
相关推荐
Python3基础教程