1. # selenium
  2.  
  3. from selenium import webdriver
  4. import time
  5.  
  6. driver_path = r"G:\Crawler and Data\chromedriver.exe"
  7. driver = webdriver.Chrome(executable_path=driver_path)
  8. driver.get('https://www.baidu.com/')
  9.  
  10. time.sleep(5)
  11.  
  12. driver.close() # 关闭页面
  13. driver.quit() # 关闭整个浏览器
  1. # selenium 定位元素 常用的6种
  2. # find_element只获取满足条件的第一个, find_elements获取所有满足条件的
  3.  
  4. 1.find_element_by_id
  5. 2.find_element_by_class_name
  6. 3.find_element_by_name
  7. 4.find_element_by_tag_name
  8. 5.find_element_by_xpath
  9. 6.find_element_by_css_selector
  10.  
  11. ############################
  12. from selenium import webdriver
  13. import time
  14. from lxml import etree
  15.  
  16. driver_path = r"G:\Crawler and Data\chromedriver.exe"
  17. driver = webdriver.Chrome(executable_path=driver_path)
  18. driver.get('https://www.baidu.com/')
  19.  
  20. # 使用 xpath 方式获取 效率高 如果只是解析页面就使用这种
  21. tree = etree.HTML(driver.page_source)
  22. li_lists = tree.xpath('xxxxxxxxxx')
  23.  
  24. # 通过id 的方式获取 如果对元素进行操作时,
  25. # 比如要发送字符串, 点击按钮, 下拉操作 就使用这种方法
  26. inputTag = driver.find_element_by_id('kw')
  27. inputTag.send_keys('python')
  28.  
  29. time.sleep(3)
  30. driver.close() # 关闭页面
  31. # driver.quit() # 关闭整个浏览器
  1. # 常见的表单元素:
  2. # input标签 type='text/password/email/number' 属于文本框
  3. # button、input type='submit'
  4. # checkbox type=‘checkbox’
  5. #
  6.  
  7. ###############
  8. # 操作表单元素
  9. # 1. 操作输入框
  10. inputTag = driver.find_element_by_id('kw')
  11. inputTag.send_keys('python')
  12. time.sleep(3)
  13.  
  14. # 2. 操作checkbox标签 豆瓣为例
  15. rememberBtn = driver.find_element_by_name('remember')
  16. rememberBtn.click()
  17.  
  18. # 3. 操作select标签 要用Select类
  19. from selenium import webdriver
  20. from selenium.webdriver.support.ui import Select
  21.  
  22. selectBtn = Select(driver.find_element_by_name('jumpMenu'))
  23. selectBtn.select_by_index(1) # 通过index 选中下拉框里的选项
  24. # selectBtn.select_by_visible_text('95秀客户端') 通过文本内容选中
  25.  
  26. # 4. 按钮的点击事件
  27. inputTag = driver.find_element_by_id('kw') #拿到输入框按钮
  28. inputTag.send_keys('python')
  29. submitTag = driver.find_element_by_id('su') #拿到点击按钮
  30. submitTag.click()
  1. # selenium 的行为链 简单介绍 有时候页面中的操作有很多步,需要一系列操作
  2. # 在爬虫中用的不多, 在测试用的多
  3.  
  4. from selenium import webdriver
  5. import time
  6. from selenium.webdriver.common.action_chains import ActionChains
  7.  
  8. driver_path = r"G:\Crawler and Data\chromedriver.exe"
  9. driver = webdriver.Chrome(executable_path=driver_path)
  10. driver.get('https://www.baidu.com/')
  11.  
  12. # 拿到两个标签
  13. inputTag = driver.find_element_by_id('kw')
  14. submitBtn = driver.finr_element_by_id('su')
  15.  
  16. actions = ActionChains(driver)
  17. actions.move_to_element(inputTag)
  18. actions.send_keys_to_element(inputTag,'python')
  19. actions.move_to_element(submitBtn)
  20. actions.click(submitBtn)
  21. actions.perform()
  1. # 在selenium中 cookies操作
  2. # 1.获取所有的cookie
  3. for cookie in driver.get_cookies():
  4. print(cookie)
  5.  
  6. # 2.根据cookie的key获取value
  7. value = driver.get_cookie(key)
  8.  
  9. # 3.删除所有的cookie
  10. driver.delete_all_cookies()
  11.  
  12. # 4.删除某一个cookie
  13. driver.delete_cookie(key)
  14.  
  15. #################################
  16. from selenium import webdriver
  17. import time
  18.  
  19. driver_path = r"G:\Crawler and Data\chromedriver.exe"
  20. driver = webdriver.Chrome(executable_path=driver_path)
  21. driver.get('https://www.baidu.com/')
  22.  
  23. for cookie in driver.get_cookies(): # 获取的是百度域名下的所有cookie
  24. print(cookie)
  1. # 页面等待 重要 防止数据没有被加载就开始使用
  2. # 因为页面很多用ajax技术,有时候要使用的数据没有加载出来,这时候使用就会报错.所以selenium提供两种等待方式
  3.  
  4. # 隐式等待: 调用driver.implicitly_wait. 那么获取不可用元素之前会先等待10秒时间.
  5. driver = webdriver.Chrome(executble_path=driver_path)
  6. driver.implicitly_wait(10) # 设置等待时间
  7. driver.get('https://www.baidu.com/') #请求访问
  8.  
  9. # 显示等待:表明某个条件成立之后才执行获取元素的操作.
  10. # 也可以在等待的时候制定一个最大的时间,如果超过这个时间那么久跑出异常.
  11. # 显示等待使用selenium.webdriver.support.excepted_condition期望条件 和 selenium.webdriver.support.ui.webDriverWait配合完成
  12. from selenium import webdriver
  13. import time
  14. from selenium.webdriver.support.ui import WebDriverWait
  15. from selenium.webdriver.support import expected_conditions as EC
  16. from selenium.webdriver.common.by import By
  17.  
  18. driver_path = r"G:\Crawler and Data\chromedriver.exe"
  19. driver = webdriver.Chrome(executable_path=driver_path)
  20. driver.get('https://www.baidu.com/')
  21.  
  22. # 等待10秒后找这个对应的id标签, 因为是错误的所以等待10秒后报错
  23. # 如果是正确的id 标签, 找到后直接继续执行, 不会等10 秒
  24. WebDriverWait(driver,10).until(
  25. EC.presence_of_element_located((By.ID,'shjdkah'))
  26. )
  1. # 打开多个窗口, 切换页面 重要 ******
  2.  
  3. from selenium import webdriver
  4. import time
  5.  
  6. driver_path = r"G:\Crawler and Data\chromedriver.exe"
  7. driver = webdriver.Chrome(executable_path=driver_path)
  8. driver.get('https://www.baidu.com/')
  9.  
  10. # 打开豆瓣
  11. driver.execute_script('window.open("https://www.douban.com/")')
  12. # 但是当前的driver还是停留在baidu页面
  13. print(driver.current_url)
  14. print(driver.window_handles) # 窗口句柄 看看现在打开的窗口有什么
  15. driver.switch_to_window(driver.window_handles[1]) # 切换窗口
  16. print(driver.current_url)
  17.  
  18. # 虽然在窗口中切换到了新的页面,但是driver中还没有切换
  19. # 如果想要在代码中切换到新的页面,并且做爬虫
  20. # 那么应该使用dirver.switch_to_window来切换到指定的窗口
  21. # 从dirver.window_handler中取出具体的第几个窗口
  22. # driver.window_handlers是一个列表,里面装的都是窗口句柄
  23. # 它会按照打开页面的顺序存储窗口句柄
  1. # selenium 设置代理ip 主要是添加一个option参数就可以了
  2.  
  3. from selenium import webdriver
  4.  
  5. # 设置代理
  6. options = webdriver.ChromeOptions()
  7. options.add_argument("--proxy-server-http://112.247.176.104:8060")
  8.  
  9. driver_path = r"G:\Crawler and Data\chromedriver.exe"
  10. driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
  11. driver.get('http://httpbin.org/ip')

selenium 操作 获取动态页面数据的更多相关文章

  1. selenium抓取动态网页数据

    1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...

  2. ajax获取动态列表数据后的分页问题

    ajax获取动态列表数据后的分页问题 这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数 ...

  3. selenium+phantomjs爬取动态页面数据

    1.安装selenium pip/pip3 install selenium 注意依赖关系 2.phantomjs for windows 下载地址:http://phantomjs.org/down ...

  4. js子页面获取父页面数据

    做页面预览的时候,数据没有存入数据库,但是要打开一个页面进行预览,询问众大婶,原来是这样来做. 1.父页面 <input type="text" id="name& ...

  5. layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法

    var frameId = $(layero).find("iframe").attr('id');//父页面获取子页面的iframe var id = $(window.fram ...

  6. jquery发起get/post请求_或_获取html页面数据

    备注:我们经常会遇到使用jquery获取某个地址下的部分页面内容,然后替换当前页面对应内容,也就是:局部刷新功能. 当然也可以使用get/post请求获取数据,修改数据,可以参考以下JS代码: 走过的 ...

  7. Jsoup获取部分页面数据失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.

    用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...

  8. Jsoup获取部分页面数据失败 Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml

    用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...

  9. layui父页面获取子页面数据

    var doc = layero.find('iframe')[0].contentDocument; var test= $(doc).find("input[name='test']&q ...

随机推荐

  1. Sampling Distribution of the Sample Mean|Central Limit Theorem

    7.3 The Sampling Distribution of the Sample Mean population:1000:Scale are normally distributed with ...

  2. cs231n spring 2017 lecture8 Deep Learning Networks

    1. CPU vs. GPU: CPU核心少(几个),更擅长串行任务.GPU有很多核心(几千个),每一个核都弱,有自己的内存(几个G),很适合并行任务.GPU最典型的应用是矩阵运算. GPU编程:1) ...

  3. printf 输出浮点数

    在测试printf函数输出结果时,写了如下代码: /** * printf:格式化输出函数 * printf函数不会按照格式控制而对数据类型进行转换,不管三七二十一, * 抓到二进制数据就按照格式控制 ...

  4. 推荐几位jenkins发布war包和jar包大佬的博客

    jenkins部署tomcat的war包和jar包 https://blog.csdn.net/liuxiaoming1109/article/details/89311696  

  5. JAVA WEB期末项目第二阶段成果

    我们做的系统是一个基于Java web与MySQL的食堂订餐系统 班级: 计科二班 小组成员:李鉴宣.袁超 1.开发环境 开发编辑器使用:Visual Studio Code 数据库使用:MySQL8 ...

  6. [PyTorch入门]之从示例中学习PyTorch

    Learning PyTorch with examples 来自这里. 本教程通过自包含的示例来介绍PyTorch的基本概念. PyTorch的核心是两个主要功能: 可在GPU上运行的,类似于num ...

  7. RocketMQ介绍与实践

    一.RocketMQ介绍         1.相关术语名词 1.  NameSrv:是一个几乎无状态节点,可集群部署,节点之间无任何信息同步. 2.  Broker:分为Master与Slave,一个 ...

  8. appium使用相对坐标定位元素

    最近在用appium做自动化时发现,有一些元素无法通过uiautomatorviewer进行定位,这样就只能通过相对坐标来进行定位了.但是,问题又来了:如何获取元素的坐标呢? 在网上找了半天也没找到相 ...

  9. PHP正则表达式-修饰符

    我们在PHP正则表达式的学习中会碰到修饰符,那么关于PHP正则表达式修饰符的理解以及使用我们需要注意什么呢?那么我们来具体的看看它的概念以及相关内容.在学习PHP正则表达式修饰符之前先来理解下贪婪模式 ...

  10. MyBatis 判断条件为等于的时候,常量需要加 .toString()

    当MyBatis 判断条件为等于的时候,常量需要加 .toString() 来转换,这种方法是稳定的,推荐使用,比如: <!-- 正确的,稳定,推荐使用 --> <if test=& ...