Всем привет, я Сяо Цай. надежда бытьхвастаться архитектуройчеловек! Если вы также хотите быть тем, кем я хочу быть, или следуйте за мной, чтобы быть компаньоном, чтобы Сяокай больше не был одинок!
Эта статья в основном знакомит
python 的入门学习
При необходимости вы можете обратиться к
Если это поможет, не забудьтеподобно❥
Официальный аккаунт WeChat открыт,Говорят овощеводы, студенты, которые не обратили внимания, не забудьте обратить внимание!
Всем привет. вот蔡不菜丶
предшественник菜农曰
. Не заблудитесь только потому, что имя изменено и изменена аватарка~
Недавно, чтобы расширить языковой аспект, я узнал об этом на этой неделе.PythonКак играть, изучив его, я обнаружил, чтоо, это вкусно. Я не знаю, думали ли вы, что это интересно, когда впервые выучили язык и хотели попробовать все.
Говоря оPythonРеакция каждого может бытьрептилия,автоматизированный тест, я редко говорю об использовании python для веб-разработки.Условно говоря, язык, который больше используется в отечественной веб-разработке, все ещеjava~Но это не значит, что python не подходит для веб-разработки, насколько я знаю, наиболее распространенными веб-фреймворками являютсяDjango
а такжеflask
подожди~
DjangoЭто очень тяжелый фреймворк, он предоставляет множество удобных инструментов и инкапсулирует многие вещи, поэтому нет необходимости строить слишком много колес самостоятельно.
FlaskПреимущество в том, что он небольшой, но недостаток также небольшой, гибкий и означает, что вам нужно построить больше колес или потратить больше времени на настройку.
Но цель этой статьи не в том, чтобы представитьвеб-разработка на питоне, и это не введениеБазовое введение в python, но давайте поговорим об автоматизированном тестировании Python и знакомстве со сканером~
На мой взгляд, если у вас есть опыт разработки на других языках, Xiaocai рекомендует начинать прямо с кейса и учиться во время просмотра.Грамматика и тому подобное на самом деле одинаковые(Содержание объединения java для изучения python будет опубликовано позже), код в принципе можно внимательно читать, но если у вас нет опыта разработки языка, то Xiaocai все же рекомендует систематическое обучение с нуля.Хорошим выбором будут видео и книги.Рекомендуется здесь廖雪峰老师
блог, содержание довольно хорошееУчебник по Python
1. Автоматизированное тестирование
Python может делать много вещей, и он может делать много интересных вещей.
Чтобы выучить язык, конечно, вам нужно найти точки интереса, чтобы выучить быстрее.Например, если вы хотите просканировать фотографии или видео определенного веб-сайта, верно?
Что такое автоматизированное тестирование? То есть自动化
+ 测试
, если вы написали скрипт (файл .py), он автоматически запустит для вас процесс тестирования в фоновом режиме после запуска, затем, используя автоматическое тестирование, есть хороший инструмент, который может помочь вам выполнить его, то естьSelenium
Selenium
Это инструмент тестирования веб-автоматизации, который может легко имитировать работу реальных пользователей в браузерах. Он поддерживает различные основные браузеры, такие какIE、Chrome、Firefox、Safari、Opera
И т. д., я использую python для демонстрации здесь, чтобы не сказатьSeleniumПоддерживает только python, имеет клиентские драйверы для нескольких языков программирования, введение в синтаксис ~ Давайте сделаем простой пример ниже!
1) Предварительная подготовка
Чтобы обеспечить плавную презентацию, нам нужно сделать некоторые предварительные приготовления, иначе браузер не сможет нормально открыться ~
шаг 1
Проверьте версию браузера, мы используем следующееEdge, мы можем ввести в поле ввода URLedge://version
Проверьте версию браузера, а затем перейдите в соответствующий магазин драйверов, чтобы установить драйвер соответствующей версии.Microsoft Edge - Webdriver (windows.net)
Шаг 2
Затем мы разархивируем загруженный файл драйвера в каталог установки python.Scripts
в папке
2) Работа в браузере
Чтобы подготовиться к предварительным действиям, давайте рассмотрим следующий простой код:
С пакетом гида всего 4 строки кода, и введите его в терминалpython autoTest.py
, и получил следующий демонстрационный эффект:
Вы можете видеть, что скрипт был реализован自动打开浏览器
,自动放大窗口
,自动打开百度网页
, три автоматические операции сделали наше обучение еще на один шаг ближе, вам не кажется, что это немного интересно~ Давайте постепенно утонем!
Вот несколько распространенных методов работы с браузером:
метод | иллюстрировать |
---|---|
webdriver.xxx() | Используется для создания объектов браузера |
maximize_window() | окно развернуто |
get_window_size() | Получить размер браузера |
set_window_size() | Установить размер браузера |
get_window_position() | Получить местоположение браузера |
set_window_position(x, y) | Установить местоположение браузера |
close() | закрыть текущую вкладку/окно |
quit() | закрыть все вкладки/окна |
Конечно, этоSelenium
Основная рутинная операция
Когда мы открываем браузер, конечно, то, что мы хотим сделать, это не просто операция открытия веб-страницы, ведь амбиции программистов безграничны! Мы также хотим автоматизировать элементы страницы, поэтому об этом нужно сказатьSelenium
операция позиционирования
3) Элементы позиционирования
Позиционирование элементов на странице не является чем-то необычным для внешнего интерфейса, и JS может легко добиться позиционирования элементов, например следующего:
- таргетинг по идентификатору
document.getElementById("id")
- Найдите по имени
document.getElementByName("name")
- Найдите по названию тега
document.getElementByTagName("tagName")
- Найдите по классу
document.getElementByClassName("className")
- таргетинг через css-селекторы
document.querySeletorAll("css selector")
Вышеупомянутые методы могут реализовать выбор и позиционирование элементов.Конечно, главный герой нашего разделаSelenium
, как основной инструмент автоматизированного тестирования, как он может показать слабость~ Он реализует позиционирование элементов страницы следующими способами8видов следующим образом:
- позиционирование идентификатора
driver.find_element_by_id("id")
Мы открываем страницу Baidu и обнаруживаем, что идентификатор поля вводаkw,
После того, как идентификатор элемента будет очищен, мы можем использовать идентификатор для поиска элемента следующим образом.
from selenium import webdriver
# 加载 Edge 驱动
driver = webdriver.ChromiumEdge()
# 设置最大窗口化
driver.maximize_window()
# 打开百度网页
driver.get("http://baidu.com")
# 通过 id 定位元素
i = driver.find_element_by_id("kw")
# 往输入框输入值
i.send_keys("菜农曰")
- позиционирование значения атрибута имени
driver.find_element_by_name("name")
Метод позиционирования имени аналогичен способу id, необходимо найти значение имени, а затем вызвать соответствующий API, способ использования следующий:
from selenium import webdriver
# 加载 Edge 驱动
driver = webdriver.ChromiumEdge()
# 设置最大窗口化
driver.maximize_window()
# 打开百度网页
driver.get("http://baidu.com")
# 通过 id 定位元素
i = driver.find_element_by_name("wd")
# 往输入框输入值
i.send_keys("菜农曰")
- позиционирование имени класса
driver.find_element_by_class_name("className")
В соответствии с методами позиционирования идентификатора и имени вам нужно найти соответствующее имя класса, а затем найти ~
- Позиционирование имени тега
driver.find_element_by_tag_name("tagName")
Мы редко используем этот метод в нашей повседневной жизни, потому что в HTML функции определяются тегами, например, ввод — это ввод, таблица — это таблица... Каждый элемент на самом деле является тегом, а тег часто используется для определения типа функция, на странице может быть несколько разделов, элементов ввода, таблиц и т. д., поэтому сложно точно определить местонахождение элементов с помощью тегов~
- css-селектор
driver.find_element_by_css_selector("cssVale")
Этот метод должен подключить пять селекторов css
Пять селекторов
- селектор элементов
Наиболее распространенным селектором CSS является селектор элемента, который обычно относится к элементу HTML в документе HTML, например:
html {background-color: black;} p {font-size: 30px; backgroud-color: gray;} h2 {background-color: red;}
- селектор класса
.
Добавление имени класса формирует селектор класса, например:.deadline { color: red;} span.deadline { font-style: italic;}
- селектор идентификатора
Селекторы идентификаторов и селекторы классов в чем-то похожи, но различия очень существенны. Прежде всего, элемент не может иметь несколько классов, таких как атрибут класса, элемент может иметь только уникальный атрибут ID. Метод использования селектора идентификатора — знак решетки.
#
Добавьте значение идентификатора, например:#top { ...}
- селектор атрибутов
Мы можем выбирать элементы на основе их атрибутов и значений атрибутов, например:
a[href][title] { ...}
- Производный селектор
также известный как селектор контекста, он использует структуру документа DOM для выбора CSS. Например:
body li { ...} h1 span { ...}
Конечно, селектор здесь — это просто краткое введение, больше информации можно найти в документации~
Разобравшись с селектором, мы можем с радостью определить позиционирование селектора css:
from selenium import webdriver
# 加载 Edge 驱动
driver = webdriver.ChromiumEdge()
# 设置最大窗口化
driver.maximize_window()
# 打开百度网页
driver.get("http://baidu.com")
# 通过 id选择器 定位元素
i = driver.find_elements_by_css_selector("#kw")
# 往输入框输入值
i.send_keys("菜农曰")
- Позиционирование текста ссылки
driver.find_element_by_link_text("linkText")
Этот метод специально используется для поиска текстовых ссылок, например, мы можем видеть, что есть新闻
,hao123
,地图
... и т.д. элементы ссылок
Затем мы можем использовать текст ссылки, чтобы найти
from selenium import webdriver
# 加载 Edge 驱动
driver = webdriver.ChromiumEdge()
# 设置最大窗口化
driver.maximize_window()
# 打开百度网页
driver.get("http://baidu.com")
# 通过 链接文本 定位元素并 点击
driver.find_element_by_link_text("hao123").click()
- Частичный текст ссылки
driver.find_element_by_partial_link_text("partialLinkText")
этот путь правильныйlink_text
Вспомогательный, иногда текст гиперссылки может быть очень длинным, если мы введем их все, это будет хлопотно и некрасиво
На самом деле нам нужно только перехватить часть строки, чтобы селен понял, что мы хотим выбрать, затем мы используем partial_link_text~
- выражение пути xpath
driver.find_element_by_xpath("xpathName")
Несколько методов позиционирования, описанных выше, идеальны: каждый элемент имеет уникальный идентификатор, имя, класс или текстовые атрибуты гиперссылки, и мы можем найти их по этому уникальному значению атрибута. Но иногда элемент, который мы хотим найти, не имеет атрибутов id, name, class, или значения этих атрибутов у нескольких элементов одинаковы, или при обновлении страницы значения этих атрибутов изменятся. Тогда в это время мы можем найти его только через xpath или CSS. Конечно, значение xpath вам вычислять не нужно, нам достаточно открыть страницу и найти соответствующий элемент по F12, кликнуть правой кнопкой мыши и скопировать xpath
Затем найдите его в коде:
from selenium import webdriver
# 加载 Edge 驱动
driver = webdriver.ChromiumEdge()
# 设置最大窗口化
driver.maximize_window()
# 打开百度网页
driver.get("http://www.baidu.com")
driver.find_element_by_xpath("//*[@id='kw']").send_keys("菜农曰")
4) Работа элемента
Конечно, то, что мы хотим сделать, это не просто выбор элементов, а операции после выбора элементов.На самом деле мы выполнили две операции в приведенной выше демонстрации.click()
а такжеsend_keys("value")
, здесь продолжайте вводить несколько других операций~
имя метода | иллюстрировать |
---|---|
click() | щелкните элемент |
send_keys("value") | Имитировать ввод с клавиатуры |
clear() | Очистить содержимое элемента, например поля ввода |
submit() | представить форму |
text | Получить текстовое содержимое элемента |
is_displayed | Проверить, виден ли элемент |
После прочтения возникает ощущение дежа вю, не это ли основная операция js~!
5) Практическая практика
Изучив вышеуказанные операции, мы можем имитировать работу торгового центра Xiaomi Mall, Код выглядит следующим образом:
from selenium import webdriver
item_url = "https://www.mi.com/buy/detail?product_id=10000330"
# 加载 Edge 驱动
driver = webdriver.ChromiumEdge()
# 设置最大窗口化
driver.maximize_window()
# 打开商品购物页
driver.get(item_url)
# 隐式等待 设置 防止网络阻塞页面未及时加载
driver.implicitly_wait(30)
# 选择地址
driver.find_element_by_xpath("//*[@id='app']/div[3]/div/div/div/div[2]/div[2]/div[3]/div/div/div[1]/a").click()
driver.implicitly_wait(10)
# 点击手动选择地址
driver.find_element_by_xpath("//*[@id='stat_e3c9df7196008778']/div[2]/div[2]/div/div/div/div/div/div/div["
"1]/div/div/div[2]/span[1]").click()
# 选择福建
driver.find_element_by_xpath("//*[@id='stat_e3c9df7196008778']/div[2]/div[2]/div/div/div/div/div/div/div/div/div/div["
"1]/div[2]/span[13]").click()
driver.implicitly_wait(10)
# 选择市
driver.find_element_by_xpath("//*[@id='stat_e3c9df7196008778']/div[2]/div[2]/div/div/div/div/div/div/div/div/div/div["
"1]/div[2]/span[1]").click()
driver.implicitly_wait(10)
# 选择区
driver.find_element_by_xpath("//*[@id='stat_e3c9df7196008778']/div[2]/div[2]/div/div/div/div/div/div/div/div/div/div["
"1]/div[2]/span[1]").click()
driver.implicitly_wait(10)
# 选择街道
driver.find_element_by_xpath("//*[@id='stat_e3c9df7196008778']/div[2]/div[2]/div/div/div/div/div/div/div/div/div/div["
"1]/div[2]/span[1]").click()
driver.implicitly_wait(20)
# 点击加入购物车
driver.find_element_by_class_name("sale-btn").click()
driver.implicitly_wait(20)
# 点击去购物车结算
driver.find_element_by_xpath("//*[@id='app']/div[2]/div/div[1]/div[2]/a[2]").click()
driver.implicitly_wait(20)
# 点击去结算
driver.find_element_by_xpath("//*[@id='app']/div[2]/div/div/div/div[1]/div[4]/span/a").click()
driver.implicitly_wait(20)
# 点击同意协议
driver.find_element_by_xpath("//*[@id='stat_e3c9df7196008778']/div[2]/div[2]/div/div/div/div[3]/button[1]").click()
Эффект следующий:
Это практика наших результатов обучения.Конечно, если вы столкнулись со спайком, вы также можете написать скрипт для тренировки своих рук~:boom: , если нет запаса, мы можем добавить одинwhile
Цикл опроса для доступа!
Во-вторых, тест на рептилий
Выше мы реализовали, как использоватьSelenium
Чтобы добиться автоматизированного тестирования, использование должно быть законным ~ Далее мы покажем еще одну мощную функцию Python, которая заключается в использовании爬虫
Прежде чем изучать сканеры, нам нужно понять несколько необходимых инструментов.
1) Загрузчик страниц
Уже предоставлено в стандартной библиотеке Python:urllib
,urllib2
,httplib
Жду модули для http запросов, но апи не простой и не элегантный~, требует много работы, и охват различных методов для выполнения простейших задач, конечно, это непосильно для программистов, а разработка героев со всех сторон Помимо множества полезных сторонних библиотек для использования~
- request
request — это http-библиотека на основе python, использующая лицензию apache2.Он хорошо инкапсулирован на основе встроенных модулей python, чтобы пользователям было проще выполнять все операции, которые браузеры могут выполнять при выполнении сетевых запросов~
- scrapy
Разница между request и scrapy может заключаться в том, что scrapy — это относительно тяжеловесный фреймворк, принадлежащий сканеру на уровне веб-сайта, а request — сканеру на уровне страницы, а его параллелизм и производительность не так хороши, как у scrapy.
2) Анализатор страниц
- BeautifulSoup
BeautifulSoup — это модуль, который получает строку HTML или XML, форматирует ее, а затем использует предоставляемые им методы для быстрого поиска указанного элемента, упрощая поиск указанного элемента в HTML или XML Simple.
- scrapy.Selector
Селектор основан на парселе, относительно продвинутом пакете, который выбирает определенную часть файла HTML с помощью определенного выражения XPath или CSS. Он построен на основе библиотеки lxml, а это значит, что они очень похожи по скорости и точности парсинга.
Для конкретного использования см.Скрап-документация, довольно подробно
3) Хранение данных
Когда мы спускаемся по контенту, нам нужен соответствующий источник хранения для хранения в это время
Конкретные операции с базой данных будут представлены в последующих сообщениях блога о веб-разработке~
- текстовый текст
Общие операции с файлом файл
- sqlite3
SQLite, легкая база данных, представляет собой ACID-совместимую систему управления реляционными базами данных, которая содержится в относительно небольшой библиотеке C.
- mysql
Не надо особо представлять, я все понимаю, я давний любитель веб-разработок
4) Практическая практика
Поисковый робот, на самом деле называемыйСбор сетевых данныхлегче понять. этоПрограммно запросите данные (форма HTML) с веб-сервера, а затем проанализируйте HTML, чтобы извлечь нужные данные.
Мы можем просто разделить его на 4 шага:
- Получить данные html на основе заданного URL-адреса
- Разобрать html, чтобы получить целевые данные
- Хранение данных
Конечно, все это должно быть основано на вашем понимании простого синтаксиса python и основных операций html~
Далее мы используемrequest + BeautifulSoup + text
Комбинация рабочих упражнений, предполагая, что мы хотим просканировать содержимое учебника по python г-на Ляо Сюэфэна ~
# 导入requests库
import requests
# 导入文件操作库
import codecs
import os
from bs4 import BeautifulSoup
import sys
import json
import numpy as np
import importlib
importlib.reload(sys)
# 给请求指定一个请求头来模拟chrome浏览器
global headers
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
server = 'https://www.liaoxuefeng.com/'
# 廖雪峰python教程地址
book = 'https://www.liaoxuefeng.com/wiki/1016959663602400'
# 定义存储位置
global save_path
save_path = 'D:/books/python'
if os.path.exists(save_path) is False:
os.makedirs(save_path)
# 获取章节内容
def get_contents(chapter):
req = requests.get(url=chapter, headers=headers)
html = req.content
html_doc = str(html, 'utf8')
bf = BeautifulSoup(html_doc, 'html.parser')
texts = bf.find_all(class_="x-wiki-content")
# 获取div标签id属性content的内容 \xa0 是不间断空白符
content = texts[0].text.replace('\xa0' * 4, '\n')
return content
# 写入文件
def write_txt(chapter, content, code):
with codecs.open(chapter, 'a', encoding=code)as f:
f.write(content)
# 主方法
def main():
res = requests.get(book, headers=headers)
html = res.content
html_doc = str(html, 'utf8')
# HTML解析
soup = BeautifulSoup(html_doc, 'html.parser')
# 获取所有的章节
a = soup.find('div', id='1016959663602400').find_all('a')
print('总篇数: %d ' % len(a))
for each in a:
try:
chapter = server + each.get('href')
content = get_contents(chapter)
chapter = save_path + "/" + each.string.replace("?", "") + ".txt"
write_txt(chapter, content, 'utf8')
except Exception as e:
print(e)
if __name__ == '__main__':
main()
Когда мы запускаем программу, мы можемD:/books/python
См. учебный контент, который мы просканировали, на месте!
Таким образом, мы просто реализовали краулер, но краулер должен быть осторожен~!
Наша статья имеет два измерения自动化测试
а также爬虫
Я знаю, как использовать Python, надеюсь, это пробудит ваш интерес~
Не болтай пустых разговоров, не ленись, готовь еду с гарнирами吹着牛X做架构
Давайте станем программистом ~ нажмите на внимание, чтобы стать компаньоном, чтобы Сяокай больше не был одинок. Увидимся ниже!
Если вы будете усердно работать сегодня, завтра вы сможете сказать на одну вещь меньше, чтобы попросить о помощи!
Я Сяо Цай, человек, который становится сильнее с тобой.
💋
Официальный аккаунт WeChat открыт,Говорят овощеводы, студенты, которые не обратили внимания, не забудьте обратить внимание!