当前位置: 首页 > news >正文

asp网站伪静态教程网站做全景

asp网站伪静态教程,网站做全景,深圳网警,建筑工程承包使用Selenium抓取网页动态内容 根据权威机构发布的全球互联网可访问性审计报告#xff0c;全球约有四分之三的网站其内容或部分内容是通过JavaScript动态生成的#xff0c;这就意味着在浏览器窗口中“查看网页源代码”时无法在HTML代码中找到这些内容#xff0c;也就是说我们… 使用Selenium抓取网页动态内容 根据权威机构发布的全球互联网可访问性审计报告全球约有四分之三的网站其内容或部分内容是通过JavaScript动态生成的这就意味着在浏览器窗口中“查看网页源代码”时无法在HTML代码中找到这些内容也就是说我们之前用的抓取数据的方式无法正常运转了。解决这样的问题基本上有两种方案一是获取提供动态内容的数据接口这种方式也适用于抓取手机 App 的数据另一种是通过自动化测试工具 Selenium 运行浏览器获取渲染后的动态内容。对于第一种方案我们可以使用浏览器的“开发者工具”或者更为专业的抓包工具如Charles、Fiddler、Wireshark等来获取到数据接口后续的操作跟上一个章节中讲解的获取“360图片”网站的数据是一样的这里我们不再进行赘述。这一章我们重点讲解如何使用自动化测试工具 Selenium 来获取网站的动态内容。 Selenium 介绍 Selenium 是一个自动化测试工具利用它可以驱动浏览器执行特定的行为最终帮助爬虫开发者获取到网页的动态内容。简单的说只要我们在浏览器窗口中能够看到的内容都可以使用 Selenium 获取到对于那些使用了 JavaScript 动态渲染技术的网站Selenium 会是一个重要的选择。下面我们还是以 Chrome 浏览器为例来讲解 Selenium 的用法大家需要先安装 Chrome 浏览器并下载它的驱动。Chrome 浏览器的驱动程序可以在ChromeDriver官网进行下载驱动的版本要跟浏览器的版本对应如果没有完全对应的版本就选择版本代号最为接近的版本。 使用Selenium 我们可以先通过pip来安装 Selenium命令如下所示。 pip install selenium 加载页面 接下来我们通过下面的代码驱动 Chrome 浏览器打开百度。 from selenium import webdriver# 创建Chrome浏览器对象browser webdriver.Chrome()# 加载指定的页面browser.get(https://www.baidu.com/) 如果不愿意使用 Chrome 浏览器也可以修改上面的代码操控其他浏览器只需创建对应的浏览器对象如 Firefox、Safari 等即可。运行上面的程序如果看到如下所示的错误提示那是说明我们还没有将 Chrome 浏览器的驱动添加到 PATH 环境变量中也没有在程序中指定 Chrome 浏览器驱动所在的位置。 selenium.common.exceptions.WebDriverException: Message: chromedriver executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home 解决这个问题的办法有三种 1. 将下载的 ChromeDriver 放到已有的 PATH 环境变量下建议直接跟 Python 解释器放在同一个目录因为之前安装 Python 的时候我们已经将 Python 解释器的路径放到 PATH 环境变量中了。 2. 将 ChromeDriver 放到项目虚拟环境下的 bin 文件夹中Windows 系统对应的目录是 Scripts这样 ChromeDriver 就跟虚拟环境下的 Python 解释器在同一个位置肯定是能够找到的。 3. 修改上面的代码在创建 Chrome 对象时通过service参数配置Service对象并通过创建Service对象的executable_path参数指定 ChromeDriver 所在的位置如下所示 from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicebrowser webdriver.Chrome(serviceService(executable_pathvenv/bin/chromedriver))browser.get(https://www.baidu.com/) 查找元素和模拟用户行为 接下来我们可以尝试模拟用户在百度首页的文本框输入搜索关键字并点击“百度一下”按钮。在完成页面加载后可以通过Chrome对象的find_element和find_elements方法来获取页面元素Selenium 支持多种获取元素的方式包括CSS 选择器、XPath、元素名字标签名、元素 ID、类名等前者可以获取单个页面元素WebElement对象后者可以获取多个页面元素构成的列表。获取到WebElement对象以后可以通过send_keys来模拟用户输入行为可以通过click来模拟用户点击操作代码如下所示。 from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser webdriver.Chrome()browser.get(https://www.baidu.com/)# 通过元素ID获取元素kw_input browser.find_element(By.ID, kw)# 模拟用户输入行为kw_input.send_keys(Python)# 通过CSS选择器获取元素su_button browser.find_element(By.CSS_SELECTOR, #su)# 模拟用户点击行为su_button.click() 如果要执行一个系列动作例如模拟拖拽操作可以创建ActionChains对象有兴趣的读者可以自行研究。 隐式等待和显式等待 这里还有一个细节需要大家知道网页上的元素可能是动态生成的在我们使用find_element或find_elements方法获取的时候可能还没有完成渲染这时会引发NoSuchElementException错误。为了解决这个问题我们可以使用隐式等待的方式通过设置等待时间让浏览器完成对页面元素的渲染。除此之外我们还可以使用显示等待通过创建WebDriverWait对象并设置等待时间和条件当条件没有满足时我们可以先等待再尝试进行后续的操作具体的代码如下所示。 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditionsfrom selenium.webdriver.support.wait import WebDriverWaitbrowser webdriver.Chrome()# 设置浏览器窗口大小browser.set_window_size(1200, 800)browser.get(https://www.baidu.com/)# 设置隐式等待时间为10秒browser.implicitly_wait(10)kw_input browser.find_element(By.ID, kw)kw_input.send_keys(Python)su_button browser.find_element(By.CSS_SELECTOR, #su)su_button.click()# 创建显示等待对象wait_obj WebDriverWait(browser, 10)# 设置等待条件等搜索结果的div出现wait_obj.until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR, #content_left)))# 截屏browser.get_screenshot_as_file(python_result.png) 上面设置的等待条件presence_of_element_located表示等待指定元素出现下面的表格列出了常用的等待条件及其含义。 执行JavaScript代码 对于使用瀑布式加载的页面如果希望在浏览器窗口中加载更多的内容可以通过浏览器对象的execute_scripts方法执行 JavaScript 代码来实现。对于一些高级的爬取操作也很有可能会用到类似的操作如果你的爬虫代码需要 JavaScript 的支持建议先对 JavaScript 进行适当的了解尤其是 JavaScript 中的 BOM 和 DOM 操作。我们在上面的代码中截屏之前加入下面的代码这样就可以利用 JavaScript 将网页滚到最下方。 # 执行JavaScript代码browser.execute_script(document.documentElement.scrollTop document.documentElement.scrollHeight) Selenium反爬的破解 有一些网站专门针对 Selenium 设置了反爬措施因为使用 Selenium 驱动的浏览器在控制台中可以看到如下所示的webdriver属性值为true如果要绕过这项检查可以在加载页面之前先通过执行 JavaScript 代码将其修改为undefined。 另一方面我们还可以将浏览器窗口上的“Chrome正受到自动测试软件的控制”隐藏掉完整的代码如下所示。 # 创建Chrome参数对象options webdriver.ChromeOptions()# 添加试验性参数options.add_experimental_option(excludeSwitches, [enable-automation])options.add_experimental_option(useAutomationExtension, False)# 创建Chrome浏览器对象并传入参数browser webdriver.Chrome(optionsoptions)# 执行Chrome开发者协议命令在加载页面时执行指定的JavaScript代码browser.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument,{source: Object.defineProperty(navigator, webdriver, {get: () undefined})})browser.set_window_size(1200, 800)browser.get(https://www.baidu.com/) 无头浏览器 很多时候我们在爬取数据时并不需要看到浏览器窗口只要有 Chrome 浏览器以及对应的驱动程序我们的爬虫就能够运转起来。如果不想看到浏览器窗口我们可以通过下面的方式设置使用无头浏览器。 options webdriver.ChromeOptions()options.add_argument(--headless)browser webdriver.Chrome(optionsoptions)感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
http://www.huolong8.cn/news/122575/

相关文章:

  • 云速网站建设山东省建设科技协会网站
  • 河东做网站公司wordpress 苗木 主题
  • 最近出入上海最新规定seo网站提交
  • 山东网站制作团队北京seo优化公司
  • 分类目录网站大全做seo公司网站建设维护
  • 网站页面设置江苏天宇建设集团有限公司网站
  • asp网站开发程序员上海市建筑工程有限公司
  • 银川建网站python简单代码
  • 大连做网站哪家好一点网络营销的具体方法
  • 做网站销售一个星期的计划小型购物网站
  • 制作网站的技术建设银行手机银行官方网站
  • 网站的flash怎么做荣耀官网首页官方
  • 网站建设部署与发布答案有多人做网站是个人备案
  • 网站开发技术html5点击立即进入正能量网站
  • 网站建设相关法律推广链接怎么制作
  • 网上翻译网站做译员网站和网页有什么区别
  • 网站推广哪个平台最好如何把代码wordpress
  • 平面设计的网站有哪些网络营销策略内容
  • 湖南电商平台网站建设平面设计职业规划
  • 杭州商城型网站建设网站续费模版
  • 建设网站用外包模板可以上线吗建筑工程管理适合女生吗
  • 三合一网站建设方案上海建设厅焊工证查询网站
  • 天津网站建设网站推广cad使用视频在线观看
  • 皮革材料做网站做网站的公司属于什么行业
  • 网站开发属于IT行业wordpress.rar
  • 做高级电工题的网站怎么重建wordpress
  • 无锡做网站中企动力外贸人才网哪家最好
  • 襄阳网站建设多少钱php+网站开发+pdf
  • PHP网站开发程序员招聘长链接在线转化短链接
  • lamp网站开发案例分析wordpress微信防红插件