当前位置:   article > 正文

Python3 爬虫之Selenium库的使用_python3 selenium

python3 selenium

今天在官网看了下Selenium库,总结了下常用的方法,直接上代码。(沈略环境搭建,网上多得是),新手建议去了解10分钟再来看这里的代码。

这里列举一下常用的查找元素方法:其实find_element_by_xpath是万能的。

单元素定位:

find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector


find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,u"新闻")
find_element(By.PARTIAL_LINK_TEXT,u"新")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su") 

多元素定位:

find_elements_by_name
find_elements_by_id
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

返回的是list列表,用print(type(elements_name))即可看到它的类型是list。

  1. from selenium import webdriver
  2. import lxml.html
  3. from selenium.webdriver.common.by import By
  4. import time
  5. from selenium.webdriver import ActionChains
  6. from selenium.common.exceptions import NoSuchElementException
  7. from selenium.webdriver.support.ui import WebDriverWait
  8. from selenium.webdriver.support import expected_conditions as EC
  9. from selenium.common.exceptions import TimeoutException, NoSuchElementException
  10. browser = webdriver.Chrome()
  11. # 先梳理一下逻辑,在讲下xpath的使用,最后讲下常用方法。
  12. '''
  13. 1、导入webdriver模块
  14. 2、通过该模块点出一个浏览器对象
  15. 3、通过浏览器对象点出连接——browser.get("")
  16. 5、通过浏览器对象点出当前页面的html标签内容——browser.page_source
  17. 6、通过浏览器对象点出要获取元素的方法来获取html标签——browser.find_element(By.ID,"q").click() or browser.find_element_by_id("q").click()
  18. 7、这里重点讲一下xpath的使用,因为其他的都简单,
  19. import lxml.html
  20. html1 = "html内容"
  21. selector = lxml.html.fromstring(html1)
  22. (1)、没有属性的标签可省略,属性都相同的标签可省略。
  23. (2)、属性以某字符串开头:xpath('//div[starts-with(@id,"test")]/text()')遍历即可。
  24. (3)、属性值包含相同字符串:把上面的starts-with改为contains遍历即可。
  25. (4)、获取子标签下的文字:lists_index=selector.xpath('//div[@class="useful"]')。info_list=lists_index[0].xpath('ul/li/text()')输出即可。
  26. (5)、获取不同标签下的文字:data=selector.xpath('//div[@id="test3"]')[0]。info=data.xpath('string(.)')输出即可。
  27. (6)、第四句的意思是,获取class为useful的div标签,以列表形式返回,第一个div为div[0],以此类推;后面那句也是以列表的形式返回文本数据。
  28. 第五句的意思是,获取id为test3的div标签的第一个div;后面那句是返回这个div[0]标签下的所有文本内容。
  29. '''
  30. html1 = '''
  31. <html>
  32. <head>
  33. <title>ceshi</title>
  34. </head>
  35. <body>
  36. <div class="useful">
  37. <ul>
  38. <li class="info">1</li>
  39. <li class="info">2</li>
  40. <li class="info">3</li>
  41. <li class="inf">4</li>
  42. </ul>
  43. </div>
  44. <div class = "useful">
  45. <ul>
  46. <li class="info">5</li>
  47. <li class="info">6</li>
  48. </ul>
  49. </div>
  50. </body>
  51. </html>
  52. '''
  53. selector = lxml.html.fromstring(html1)
  54. useful = selector.xpath('//div[@class="useful"]')
  55. info_list = useful[0].xpath('ul/li/text()')
  56. print(info_list)
  57. # 打开知乎,滑到最底下,输出一句话
  58. # browser.get("http://www.zhihu.com/explore")
  59. # browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
  60. # browser.execute_script('alert("To Bottom")')
  61. # 打开淘宝,输入ipad,删除后输入MakBook pro,点击搜索
  62. # browser.get("http://www.taobao.com")
  63. # input_str = browser.find_element_by_id('q')
  64. # input_str.send_keys("ipad")
  65. # time.sleep(1)
  66. # input_str.clear()
  67. # input_str.send_keys("MakBook pro")
  68. # button = browser.find_element_by_class_name('btn-search')
  69. # button.click()
  70. # 打开一个网址,拖动滑块到吻合的地方
  71. # url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
  72. # browser.get(url)
  73. # browser.switch_to.frame('iframeResult')
  74. # source = browser.find_element_by_css_selector('#draggable')
  75. # target = browser.find_element_by_css_selector('#droppable')
  76. # actions = ActionChains(browser)
  77. # actions.drag_and_drop(source, target)
  78. # actions.perform()
  79. # 打开网页,获取元素touple,获取属性的值
  80. # url = 'https://www.zhihu.com/explore'
  81. # browser.get(url)
  82. # logo = browser.find_element_by_id('zh-top-link-logo')
  83. # print(logo)
  84. # print(logo.get_attribute('class'))
  85. # 获取ID,位置,标签名
  86. # url = 'https://www.zhihu.com/explore'
  87. # browser.get(url)
  88. # input = browser.find_element_by_class_name('zu-top-add-question')
  89. # print(input.id)
  90. # print(input.location)
  91. # print(input.tag_name)
  92. # print(input.size)
  93. # 切入到frame中以及切出来
  94. # url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
  95. # browser.get(url)
  96. # browser.switch_to.frame('iframeResult') # 切入
  97. # source = browser.find_element_by_css_selector('#draggable')
  98. # print(source)
  99. # try:
  100. # logo = browser.find_element_by_class_name('logo')
  101. # except NoSuchElementException:
  102. # print('NO LOGO')
  103. #
  104. # browser.switch_to.parent_frame() # 切出
  105. # logo = browser.find_element_by_class_name('logo')
  106. # print(logo)
  107. # print(logo.text)
  108. # 隐式等待(等10秒钟后还没出现就报错)
  109. # browser.implicitly_wait(10)
  110. # browser.get('https://www.zhihu.com/explore')
  111. # input = browser.find_element_by_class_name('zu-top-add-question')
  112. # print(input)
  113. # 显示等待(等待某个元素出现)
  114. # browser.get('https://www.taobao.com/')
  115. # wait = WebDriverWait(browser, 10)
  116. # input = wait.until(EC.presence_of_element_located((By.ID, 'q'))) # 元素是否出现
  117. # button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search'))) # 元素是否可点击
  118. # print(input, button)
  119. '''
  120. 常用的判断条件:
  121. title_is 标题是某内容
  122. title_contains 标题包含某内容
  123. presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
  124. visibility_of_element_located 元素可见,传入定位元组
  125. visibility_of 可见,传入元素对象
  126. presence_of_all_elements_located 所有元素加载出
  127. text_to_be_present_in_element 某个元素文本包含某文字
  128. text_to_be_present_in_element_value 某个元素值包含某文字
  129. frame_to_be_available_and_switch_to_it frame加载并切换
  130. invisibility_of_element_located 元素不可见
  131. element_to_be_clickable 元素可点击
  132. staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
  133. element_to_be_selected 元素可选择,传元素对象
  134. element_located_to_be_selected 元素可选择,传入定位元组
  135. element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
  136. element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
  137. alert_is_present 是否出现Alert
  138. '''
  139. # 浏览器的前进和后退
  140. # browser = webdriver.Chrome()
  141. # browser.get('https://www.baidu.com/')
  142. # browser.get('https://www.taobao.com/')
  143. # browser.get('https://www.zhihu.com/explore')
  144. # browser.back()
  145. # time.sleep(1)
  146. # browser.forward()
  147. # browser.close()
  148. # cookie操作
  149. # browser.get('https://www.zhihu.com/explore')
  150. # print(browser.get_cookies()) # 得到
  151. # browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'zhaofan'}) # 添加
  152. # print(browser.get_cookies())
  153. # browser.delete_all_cookies() # 删除
  154. # print(browser.get_cookies())
  155. # 选项卡的切换
  156. # browser.get('https://www.baidu.com') # 去百度(卡一)
  157. # browser.execute_script('window.open()') # 打开新选项卡(卡二)
  158. # print(browser.window_handles)
  159. # browser.switch_to_window(browser.window_handles[1]) # 获得卡二 去淘宝
  160. # browser.get('https://www.taobao.com')
  161. # time.sleep(1)
  162. # browser.switch_to_window(browser.window_handles[0]) # 获得卡一 去知乎
  163. # browser.get('https://www.zhihu.com/explore')
  164. # 异常处理
  165. # 这里的异常比较复杂,官网的参考地址:
  166. # http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions
  167. # 超时、没找到元素异常处理
  168. # try:
  169. # browser.get('https://www.baidu.com')
  170. # except TimeoutException:
  171. # print('Time Out')
  172. # try:
  173. # browser.find_element_by_id('hello')
  174. # except NoSuchElementException:
  175. # print('No Element')
  176. # finally:
  177. # browser.close()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/372244
推荐阅读
相关标签
  

闽ICP备14008679号