Selenium
自动化测试工具,支持多种浏览器,在爬虫中主要解决JS的渲染问题
1.基本使用
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from 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') #输入Python input.send_key(Keys.ENTER) #输入enter wait=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.clear input.send_key('cccc') button=browser.find_element_by_class_name('tttt') button.click
4. 交互动作,区别于元素操作
from selenium import webdriver from selenium.webdriver import ActionChains browser = 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 webdriver browser = webdriver.chrome() browser.get('http://www.baidu.com') browser.execute_script('具体的js的操作') browser.execute_script('可以添加提示')
6. 获取元素信息
from selenium import webdriver from selenium.webdriver import ActionChains browser = 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') #切换到指定的frame browser.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')