Selenium
自动化测试工具,支持多种浏览器,在爬虫中主要解决JS的渲染问题
1.基本使用
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait
browser = webdriver.chrome() #声明浏览器对象try: browser.get('http://www.baidu.com') #访问页面input=browser.find_element_by_id('kw') #查找元素input.send_keys('Python') #输入Pythoninput.send_key(Keys.ENTER) #输入enterwait=WebDriverWait(browser,10)wait.until(EC.presence_of_element_located(By.ID,'content_left')) #找到对应的元素print(browser.current_url)print(browser.get_COOKIEs())print(browser.page_source)finally:browser.close()
2.查找方式
单个元素:
browser.find_element_by_id('q') == browser.find_element_by_css_selector('#q') == browser.find_element_by_css_xpath('//*[@id='1']')
多个元素:
browser.find_element(By.ID,'q')
3. 元素交互操作: https://selenium-python-zh.readthedocs.io/en/latest/
input.send_key('ssss')time.sleep(1)input.clearinput.send_key('cccc')button=browser.find_element_by_class_name('tttt')button.click
4. 交互动作,区别于元素操作
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.chrome()url = 'www.ddddsdsdsds.com' browser.get(url)browser.switch_to.frame('模块名')source=browser.find_element_by_css_selector('#draggable') #找到两个模块target=browser.find_element_by_css_selector('droppable')actions=ActionChains(browser)actions.drag_and_drop(source,target) #执行操作actions.perform()
5. 执行Javascript
from selenium import webdriverbrowser = webdriver.chrome() browser.get('http://www.baidu.com') browser.execute_script('具体的js的操作') browser.execute_script('可以添加提示')
6. 获取元素信息
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.chrome()url = 'www.ddddsdsdsds.com' browser.get(url) logo=browser.find_element_by_id('模块名')print(logo.get-attributes('class')) #获取属性print(logo.text) #获取文本值
7. Frame
browser.switch_to.frame('fram_id') #切换到指定的framebrowser.switch_to.parent_frame() #切换到父frame
9. 前进后退:
browser.back()browser.sleep()browser.forward()print(browser.get_COOKIEs) #获取COOKIEs
10. 选项卡管理
browser.execute_script('windows.open') #新开一个选项卡browser.switch_to_window(browser.windo_handles[1]) #切换到第一个选项卡
8. 异常处理:
有异常问题,直接打印
例子: except TimeoutException:
print('Timeout')