selenium 基础用法

初识selenium

selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题

selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器

声明浏览器对象:

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. browser = webdriver.Firefox()
  5. browser = webdriver.Edge()
  6. browser = webdriver.PhantomJS() #无界面浏览器,目前已经停止维护后期使用者会越来越少,推荐使用chrome无头liu浏览器
  7. browser = webdriver.Safari()

安装

  1. #安装:selenium+chromedriver
  2. pip3 install selenium
  3. 下载chromdriver.exe放到python安装路径的scripts目录中即可
  4. 国内镜像网站地址:http://npm.taobao.org/mirrors/chromedriver/2.29/
  5. 最新的版本去官网找:https://sites.google.com/a/chromium.org/chromedriver/downloads
  6.  
  7. #安装:selenium+phantomjs
  8. pip3 install selenium
  9. 下载phantomjs,解压后把phantomjs.exe所在的bin目录放到环境变量
  10. 下载链接:http://phantomjs.org/download.html
  11.  
  12. #注意:
  13. selenium3默认支持的webdriverFirfox,而Firefox需要安装geckodriver
  14. 下载链接:https://github.com/mozilla/geckodriver/releases

基本使用

  1. from selenium import webdriver
  2. from time import sleep
  3.  
  4. broswer = webdriver.Chrome(executable_path = r'C:\Users\Administrator\chromedriver.exe')
  5. broswer.get(url='https://www.baidu.com/')
  6. sleep(2)
  7. text_input = broswer.find_element_by_id('kw')
  8.  
  9. text_input.send_keys('人民币')
  10. sleep(2)
  11. broswer.find_element_by_id('su').click()
  12.  
  13. sleep(3)
  14.  
  15. #获取当前的页面源码数据
  16. print(broswer.page_source)
  17. broswer.quit()

browser.page_source 返回页面HTML

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.taobao.com')
  5. print(browser.page_source)
  6. browser.close()

查找元素

单个元素

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.taobao.com')
  5. input_first = browser.find_element_by_id('q')
  6. input_second = browser.find_element_by_css_selector('#q')
  7. input_third = browser.find_element_by_xpath('//*[@id="q"]')
  8. print(input_first, input_second, input_third)
  9. browser.close()
  1. <selenium.webdriver.remote.webelement.WebElement (session="5e53d9e1c8646e44c14c1c2880d424af", element="0.5649563096161541-1")> <selenium.webdriver.remote.webelement.WebElement (session="5e53d9e1c8646e44c14c1c2880d424af", element="0.5649563096161541-1")> <selenium.webdriver.remote.webelement.WebElement (session="5e53d9e1c8646e44c14c1c2880d424af", element="0.5649563096161541-1")>

输出结果

selenium一些常用的命令释义:

  1. browser.page_sourse #打印出页面源代码
  2. browser.title #打印页面标题
  3. browser.quit() #退出浏览器
  4. browser.close() #关闭这个页面
  5. browser.maximize_window()  #将浏览器最大化显示
  6. browser.set_window_size(480, 800) #设置浏览器宽480、高800显示
  7. browser.back() #浏览器后退
  8. browser.forward() #浏览器前进

webdriver提供了一系列的对象定位方法,常用的有以下几种

  • id
  • name
  • class name
  • link text
  • partial link text
  • tag name
  • xpath
  • css selector

我们可以看到,一个百度的输入框,可以用这么用种方式去定位

  1. browser.get("http://www.baidu.com")
  2. time.sleep(2)
  3. #########百度输入框的定位方式###########通过id方式定位browser.find_element_by_id("kw").send_keys("selenium")
  4. #通过name方式定位
  5. browser.find_element_by_name("wd").send_keys("selenium")
  6. #通过tag name方式定位
  7. browser.find_element_by_tag_name("input").send_keys("selenium")
  8. #通过class name 方式定位
  9. browser.find_element_by_class_name("s_ipt").send_keys("selenium")
  10. #通过CSS方式定位
  11. browser.find_element_by_css_selector("#kw").send_keys("selenium")
  12. #通过xpatn方式定位
  13. browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
  14. #通过link 文字超链接定位
  15. broswer.find_element_by_link_text("贴吧").click()
  16. #通过部分文字超链接定位
  17. broswer.find_element_by_partial_link_text("贴").click()
  18. browser.find_element_by_id("su").click()
  19. time.sleep(3)
  20. browser.quit()

多个元素

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.taobao.com')
  5. lis = browser.find_elements_by_css_selector('.service-bd li')
  6. print(lis)
  7. browser.close()
  1. [<selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-1")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-2")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-3")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-4")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-5")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-6")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-7")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-8")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-9")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-10")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-11")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-12")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-13")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-14")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-15")>, <selenium.webdriver.remote.webelement.WebElement (session="c26290835d4457ebf7d96bfab3740d19", element="0.09221044033125603-16")>]

输出结果

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3.  
  4. browser = webdriver.Chrome()
  5. browser.get('https://www.taobao.com')
  6. lis = browser.find_elements(By.CSS_SELECTOR, '.service-bd li')
  7. print(lis)
  8. browser.close()
  1. [<selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-1")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-2")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-3")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-4")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-5")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-6")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-7")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-8")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-9")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-10")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-11")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-12")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-13")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-14")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-15")>, <selenium.webdriver.remote.webelement.WebElement (session="bca1503cd36be550e8dba984b55c5d0e", element="0.7914623408963901-16")>]

输出结果

元素互交操作

对获取的元素调用交互方法

  1. from selenium import webdriver
  2. import time
  3.  
  4. browser = webdriver.Chrome()
  5. browser.get('https://www.taobao.com')
  6. input = browser.find_element_by_id('q')
  7. input.send_keys('iPhone')
  8. time.sleep(1)
  9. input.clear()
  10. input.send_keys('iPad')
  11. button = browser.find_element_by_class_name('btn-search')
  12. button.click()

更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement

交互动作

将动作附加到动作链中串行执行

  1. from selenium import webdriver
  2. from selenium.webdriver import ActionChains
  3.  
  4. browser = webdriver.Chrome()
  5. url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
  6. browser.get(url)
  7. browser.switch_to.frame('iframeResult')
  8. source = browser.find_element_by_css_selector('#draggable')
  9. target = browser.find_element_by_css_selector('#droppable')
  10. actions = ActionChains(browser)
  11. actions.drag_and_drop(source, target)
  12. actions.perform()

更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

执行JavaScript(拖动网页滑动条,从上到下拉动界面渲染)

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.zhihu.com/explore')
  5. browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
  6. browser.execute_script('alert("To Bottom")')

获取元素信息

获取属性

  1. from selenium import webdriver
  2. from selenium.webdriver import ActionChains
  3.  
  4. browser = webdriver.Chrome()
  5. url = 'https://www.zhihu.com/explore'
  6. browser.get(url)
  7. logo = browser.find_element_by_id('zh-top-link-logo')
  8. print(logo)
  9. print(logo.get_attribute('class'))
  1. <selenium.webdriver.remote.webelement.WebElement (session="5a9e00352fbb1bb3df8b81a9f666cba9", element="0.7456057855126614-1")>
  2. zu-top-link-logo

输出结果

获取文本

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. url = 'https://www.zhihu.com/explore'
  5. browser.get(url)
  6. input = browser.find_element_by_class_name('zu-top-add-question')
  7. print(input.text)
  1. 提问

获取ID、位置、标签名、大小

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. url = 'https://www.zhihu.com/explore'
  5. browser.get(url)
  6. input = browser.find_element_by_class_name('zu-top-add-question')
  7. print(input.id)
  8. print(input.location)
  9. print(input.tag_name)
  10. print(input.size)
  1. 0.6822924344980397-1
  2. {'y': 7, 'x': 774}
  3. button
  4. {'height': 32, 'width': 66}

Frame

  1. import time
  2. from selenium import webdriver
  3. from selenium.common.exceptions import NoSuchElementException
  4.  
  5. browser = webdriver.Chrome()
  6. url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
  7. browser.get(url)
  8. browser.switch_to.frame('iframeResult')
  9. source = browser.find_element_by_css_selector('#draggable')
  10. print(source)
  11. try:
  12. logo = browser.find_element_by_class_name('logo')
  13. except NoSuchElementException:
  14. print('NO LOGO')
  15. browser.switch_to.parent_frame()
  16. logo = browser.find_element_by_class_name('logo')
  17. print(logo)
  18. print(logo.text)
  1. <selenium.webdriver.remote.webelement.WebElement (session="4bb8ac03ced4ecbdefef03ffdc0e4ccd", element="0.44746093888932004-1")>
  2. NO LOGO
  3. <selenium.webdriver.remote.webelement.WebElement (session="4bb8ac03ced4ecbdefef03ffdc0e4ccd", element="0.13792611320464965-2")>
  4. RUNOOB.COM

等待

隐式等待

当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. browser.implicitly_wait(10)
  5. browser.get('https://www.zhihu.com/explore')
  6. input = browser.find_element_by_class_name('zu-top-add-question')
  7. print(input)
  1. <selenium.webdriver.remote.webelement.WebElement (session="b29214772d59e912f1ac52e96ed29abe", element="0.12886805191194894-1")>

显示等待

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.support.ui import WebDriverWait
  4. from selenium.webdriver.support import expected_conditions as EC
  5.  
  6. browser = webdriver.Chrome()
  7. browser.get('https://www.taobao.com/')
  8. wait = WebDriverWait(browser, 10)
  9. input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
  10. button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
  11. print(input, button)
  1. <selenium.webdriver.remote.webelement.WebElement (session="07dd2fbc2d5b1ce40e82b9754aba8fa8", element="0.5642646294074107-1")> <selenium.webdriver.remote.webelement.WebElement (session="07dd2fbc2d5b1ce40e82b9754aba8fa8", element="0.5642646294074107-2")>
  • title_is 标题是某内容
  • title_contains 标题包含某内容
  • presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
  • visibility_of_element_located 元素可见,传入定位元组
  • visibility_of 可见,传入元素对象
  • presence_of_all_elements_located 所有元素加载出
  • text_to_be_present_in_element 某个元素文本包含某文字
  • text_to_be_present_in_element_value 某个元素值包含某文字
  • frame_to_be_available_and_switch_to_it frame加载并切换
  • invisibility_of_element_located 元素不可见
  • element_to_be_clickable 元素可点击
  • staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
  • element_to_be_selected 元素可选择,传元素对象
  • element_located_to_be_selected 元素可选择,传入定位元组
  • element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
  • element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
  • alert_is_present 是否出现Alert

详细内容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

前进后退

  1. import time
  2. from selenium import webdriver
  3.  
  4. browser = webdriver.Chrome()
  5. browser.get('https://www.baidu.com/')
  6. browser.get('https://www.taobao.com/')
  7. browser.get('https://www.python.org/')
  8. browser.back()
  9. time.sleep(1)
  10. browser.forward()
  11. browser.close()

Cookies

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.zhihu.com/explore')
  5. print(browser.get_cookies())
  6. browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})
  7. print(browser.get_cookies())
  8. browser.delete_all_cookies()
  9. print(browser.get_cookies())
  1. [{'secure': False, 'value': '"NGM0ZTM5NDAwMWEyNDQwNDk5ODlkZWY3OTkxY2I0NDY=|1491604091|236e34290a6f407bfbb517888849ea509ac366d0"', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'l_cap_id', 'expiry': 1494196091.403418}, {'secure': False, 'value': '"YWEyOGY4MmI1MzQ2NGY5MmFiMjgzZGUzZWJjYTgwYjY=|1491604091|ff946847ddb5881245bdb7a5e6401b70dc61013f"', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'cap_id', 'expiry': 1494196091.402855}, {'secure': False, 'value': '', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'l_n_c'}, {'secure': False, 'value': '"MjcxMDE3YzU1YjI4NDljZjljNTQ4ZDIyOWJjZTBhNmY=|1491604091|8da4722b56a1545c2020dba97394a220c0eca8d9"', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'r_cap_id', 'expiry': 1494196091.402525}, {'secure': False, 'value': '', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmc'}, {'secure': False, 'value': '"AADCo7e1kguPTqvEOMieRUzwkA7ZUBhV-VY=|1491604091"', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'd_c0', 'expiry': 1586212091.344773}, {'secure': False, 'value': '51854390.1491604091.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmz', 'expiry': 1507372091}, {'secure': False, 'value': '3cc99fc5-8706-43fc-90ac-3ad991bd1a25', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '_zap', 'expiry': 1554676091}, {'secure': False, 'value': '97cb00128ccb46659728f7c69cc191b0|1491604091000|1491604091000', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'q_c1', 'expiry': 1586212091.401644}, {'secure': False, 'value': '51854390.2.10.1491604091', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmb', 'expiry': 1491605891}, {'secure': False, 'value': '', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'n_c'}, {'secure': False, 'value': '51854390.000--|3=entry_date=20170408=1', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmv', 'expiry': 1554676091}, {'secure': False, 'value': '51854390.669300758.1491604091.1491604091.1491604091.1', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utma', 'expiry': 1554676091}, {'secure': False, 'value': '', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmt', 'expiry': 1491604691}, {'secure': False, 'value': 'AQAAALCZuwh+dgIAeu3PPHA+csDPnXvT', 'domain': 'www.zhihu.com', 'path': '/', 'httpOnly': True, 'name': 'aliyungf_tc'}]
  2. [{'secure': False, 'value': 'germey', 'domain': '.www.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'name'}, {'secure': False, 'value': '"NGM0ZTM5NDAwMWEyNDQwNDk5ODlkZWY3OTkxY2I0NDY=|1491604091|236e34290a6f407bfbb517888849ea509ac366d0"', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'l_cap_id', 'expiry': 1494196091.403418}, {'secure': False, 'value': '"YWEyOGY4MmI1MzQ2NGY5MmFiMjgzZGUzZWJjYTgwYjY=|1491604091|ff946847ddb5881245bdb7a5e6401b70dc61013f"', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'cap_id', 'expiry': 1494196091.402855}, {'secure': False, 'value': '', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'l_n_c'}, {'secure': False, 'value': '"MjcxMDE3YzU1YjI4NDljZjljNTQ4ZDIyOWJjZTBhNmY=|1491604091|8da4722b56a1545c2020dba97394a220c0eca8d9"', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'r_cap_id', 'expiry': 1494196091.402525}, {'secure': False, 'value': '', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmc'}, {'secure': False, 'value': '"AADCo7e1kguPTqvEOMieRUzwkA7ZUBhV-VY=|1491604091"', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'd_c0', 'expiry': 1586212091.344773}, {'secure': False, 'value': '51854390.1491604091.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmz', 'expiry': 1507372091}, {'secure': False, 'value': '3cc99fc5-8706-43fc-90ac-3ad991bd1a25', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '_zap', 'expiry': 1554676091}, {'secure': False, 'value': '97cb00128ccb46659728f7c69cc191b0|1491604091000|1491604091000', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'q_c1', 'expiry': 1586212091.401644}, {'secure': False, 'value': '51854390.2.10.1491604091', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmb', 'expiry': 1491605891}, {'secure': False, 'value': '', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': 'n_c'}, {'secure': False, 'value': '51854390.000--|3=entry_date=20170408=1', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmv', 'expiry': 1554676091}, {'secure': False, 'value': '51854390.669300758.1491604091.1491604091.1491604091.1', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utma', 'expiry': 1554676091}, {'secure': False, 'value': '', 'domain': '.zhihu.com', 'path': '/', 'httpOnly': False, 'name': '__utmt', 'expiry': 1491604691}, {'secure': False, 'value': 'AQAAALCZuwh+dgIAeu3PPHA+csDPnXvT', 'domain': 'www.zhihu.com', 'path': '/', 'httpOnly': True, 'name': 'aliyungf_tc'}]
  3. []

输出结果

选项卡管理

  1. import time
  2. from selenium import webdriver
  3.  
  4. browser = webdriver.Chrome()
  5. browser.get('https://www.baidu.com')
  6. browser.execute_script('window.open()')
  7. print(browser.window_handles)
  8. browser.switch_to_window(browser.window_handles[1])
  9. browser.get('https://www.taobao.com')
  10. time.sleep(1)
  11. browser.switch_to_window(browser.window_handles[0])
  12. browser.get('https://python.org')
  1. ['CDwindow-4f58e3a7-7167-4587-bedf-9cd8c867f435', 'CDwindow-6e05f076-6d77-453a-a36c-32baacc447df']

异常处理

  1. from selenium import webdriver
  2.  
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.baidu.com')
  5. browser.find_element_by_id('hello')
  1. NoSuchElementException Traceback (most recent call last)
  2. <ipython-input-23-978945848a1b> in <module>()
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.baidu.com')
  5. ----> 5 browser.find_element_by_id('hello')
  6.  
  7. /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py in find_element_by_id(self, id_)
  8. driver.find_element_by_id('foo')
  9. """
  10. --> 269 return self.find_element(by=By.ID, value=id_)
  11.  
  12. def find_elements_by_id(self, id_):
  13.  
  14. /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py in find_element(self, by, value)
  15. return self.execute(Command.FIND_ELEMENT, {
  16. 'using': by,
  17. --> 752 'value': value})['value']
  18.  
  19. def find_elements(self, by=By.ID, value=None):
  20.  
  21. /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params)
  22. response = self.command_executor.execute(driver_command, params)
  23. if response:
  24. --> 236 self.error_handler.check_response(response)
  25. response['value'] = self._unwrap_value(
  26. response.get('value', None))
  27.  
  28. /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
  29. elif exception_class == UnexpectedAlertPresentException and 'alert' in value:
  30. raise exception_class(message, screen, stacktrace, value['alert'].get('text'))
  31. --> 192 raise exception_class(message, screen, stacktrace)
  32.  
  33. def _value_or_default(self, obj, key, default):
  34.  
  35. NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"hello"}
  36. (Session info: chrome=57.0.2987.133)
  37. (Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Mac OS X 10.12.3 x86_64)

异常

  1. from selenium import webdriver
  2. from selenium.common.exceptions import TimeoutException, NoSuchElementException
  3.  
  4. browser = webdriver.Chrome()
  5. try:
  6. browser.get('https://www.baidu.com')
  7. except TimeoutException:
  8. print('Time Out')
  9. try:
  10. browser.find_element_by_id('hello')
  11. except NoSuchElementException:
  12. print('No Element')
  13. finally:
  14. browser.close()
  1. No Element

详细文档:http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions

无界面浏览器

  1. # 无界面
  2. chrome_options = webdriver.ChromeOptions()
  3. chrome_options.add_argument('--headless') #无头
  4. chrome_options.add_argument('--disable-gpu') #不启动gpu加速(可选)
  5. driver = webdriver.Chrome((executable_path=r'C:\software\chromedriver.exe',chrome_options=chrome_options)

【Python爬虫】selenium基础用法的更多相关文章

  1. python爬虫---selenium库的用法

    python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...

  2. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...

  3. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  4. [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

    前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...

  5. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  6. [python爬虫] Selenium常见元素定位方法和操作的学习介绍

    这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...

  7. Python Numpy shape 基础用法(转自他人的博客,如涉及到侵权,请联系我)

    Python Numpy shape 基础用法 shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入 ...

  8. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  9. Python爬虫-selenium的使用(2)

    使用selenium打开chrome浏览器百度进行搜索 12345678910111213141516171819202122232425 from selenium import webdriver ...

随机推荐

  1. TCP连接

    https://www.cnblogs.com/dj0325/p/8490293.html

  2. ELK 性能(4) — 大规模 Elasticsearch 集群性能的最佳实践

    ELK 性能(4) - 大规模 Elasticsearch 集群性能的最佳实践 介绍 集群规模 集群数:6 整体集群规模: 300 Elasticsearch 实例 141 物理服务器 4200 CP ...

  3. Ubuntu下的Wine&WineQQ

    一.安装Wine 1.添加PPA sudo add-apt-repository ppa:ubuntu-wine/ppa 2.更新列表 sudo apt-get update 3.安装Wine sud ...

  4. A Tour of ParallelExtensionsExtras

    Throughout the development of Parallel Extensions for the .NET Framework 4, we've come across a myri ...

  5. 原 TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系

    首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层.但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生. 1,MTU( ...

  6. 牛客网_Go语言相关练习_选择题(2)

    注:题目来源均出自牛客网. 一.选择题 Map(集合)属于Go的内置类型,不需要引入其它库即可使用. Go-Map_菜鸟教程 在函数声明中,返回的参数要么都有变量名,要么都没有. C选项函数声明语法有 ...

  7. 将本地代码上传github

    建立本地仓库 1.首先进入text文件夹 cd d:text 首先进入text文件夹 2.执行指令:git init 执行git init 初始化成功后你会发现项目里多了一个隐藏文件夹.git 隐藏的 ...

  8. 手动添加jar包到本地maven仓库(已测)ok

    很多时候我们需要的jar包在maven仓库上没有 我们可以自己找到这个jar包,但是怎么通过在pom文件配置使用呢? 需要我们手动将本地的jar包添加到本地maven仓库. 前提是已经配置好maven ...

  9. JavaScript隐藏的坑一,隐式调用toString

    最近在重新学习JavaScript,看动态原型对象的时候,打印了两个用同一个构造函数生成的对象,但是打印结果却不一样,请看代码: var box1=new Box(); console.log(box ...

  10. [R]统计工具包

    Wilcoxon Rank Sum and Signed Rank Tests data <-read.csv('XX.csv') wilcox.test(data$value1, data$v ...