Diverses utilisations du sélénium et connexion 12306 simulée

  • Quelle est la relation entre le sélénium et les robots d'exploration?
    -Accès pratique aux données chargées dynamiquement sur le site Web
    -Connexion simulée pratique
  • Qu'est-ce que le sélénium?
    • Module d'automatisation basé sur un navigateur
  • Processus d'utilisation du sélénium:
    • Installez le sélénium

    • Téléchargez un pilote d'installation de navigateur (par exemple, Google)

      • Chemin de téléchargement: http://chromedriver.storage.googleapis.com/index.html
      • La relation de mappage entre le pilote et le navigateur: http://blog.csdn.net/huilan_same/article/details/51896672
      • Écrivez le code d'opération basé sur l'automatisation du navigateur.
        Vous pouvez entrer Lufei Xuecheng sur Baidu pour le trouver.
    • Selenium gère l'iframe (une portée) :

      • Si la balise de positionnement existe dans la balise iframe, bro.switch_to.iframe (id) doit être utilisé
      • Chaîne d'action (glisser): depuis selenium.webdriver import ActionChins
        • Objet instancié: ActionChins (bro)
        • click_and_hold (div): opération de pression longue et clic
        • move_by_offset (x, y)
        • perform () Exécute immédiatement la chaîne dynamique
        • action.release () libère l'objet chaîne d'actions
    • 12306 Atterrissage simulé -
      Super Eagle (je l'ai présenté dans l'article précédent, je ne ferai donc pas trop de description)

      • Site officiel du processus d'utilisation: http://www.chaojiying.com/about.html
        • inscrit
        • s'identifier
          • Question Points Requête Recharge
          • Créer un logiciel (id)
          • Exemple de code de téléchargement de document de développement
    • Processus de codage de connexion de simulation 12306

      • Utilisez le sélénium pour ouvrir la page de destination
      • Prendre une capture d'écran de la page actuellement ouverte par sélénium
      • Recadrer la zone locale de l'image actuelle, à savoir la zone de code de vérification
        • Avantage: Correspondance individuelle entre l'image du code de vérification et la connexion simulée
      • Utilisez Super Eagle pour la reconnaissance du code de vérification (retour aux coordonnées pertinentes)
      • Cliquez sur les coordonnées pertinentes
      • Code de vérification de l'opération code lié à l'image
        Commencez par mettre un code d'utilisation de base du sénile.
from selenium import  webdriver
from lxml import etree
from time import sleep
#实例化浏览器兑现,传入浏览器的驱动程序
bro = webdriver.Chrome(executable_path='./chromedriver')
#让浏览器发起一个指定url对应请求
bro.get('http://125.35.6.84:81/xk/')
page_text = bro.page_source

#解析企业名称
tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="gzlist"]/li')
for li in li_list:
    name = li.xpath('./dl/@title')[0]
    print(name)
sleep(5)
bro.quit()

Quelques images des résultats d'exécution de code:
Insérez la description de l'image ici
jetons un coup d'œil à certaines opérations automatisées de Senleium, que vous pouvez trouver sur Baidu.

from selenium import webdriver
from time import sleep
#设置驱动程序
bro = webdriver.Chrome('./chromedriver')
bro.get('http://taobao.com/')
#标签定位
serach_input = bro.find_element_by_id('q')
#标签交互
serach_input.send_keys('Ipone')
#执行一组js程序
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(3)
#点击按钮
btn = bro.find_element_by_class_name('btn-search')
btn.click()

bro.get('http://www.baidu.com/')
bro.back()
sleep(2)
bro.forward()
sleep(2)
bro.quit()

Vous pouvez l'exécuter vous-même pour voir l'effet, et je ne jouerai plus le résultat.
Vient ensuite un code qui simule la connexion QQ. Bien sûr, je ne mettrai pas mon QQ. Le résultat final est définitivement un échec de connexion. Vous pouvez entrer votre propre QQ et mot de passe, puis tester.

from selenium import webdriver
from time import sleep
#设置驱动程序
bro = webdriver.Chrome('./chromedriver')
bro.get('http://taobao.com/')
#标签定位
serach_input = bro.find_element_by_id('q')
#标签交互
serach_input.send_keys('Ipone')
#执行一组js程序
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(3)
#点击按钮
btn = bro.find_element_by_class_name('btn-search')
btn.click()

bro.get('http://www.baidu.com/')
bro.back()
sleep(2)
bro.forward()
sleep(2)
bro.quit()

Le dernier est notre point fort, la connexion simulée de 12306, car cette reconnaissance de code de vérification est une chose plus compliquée.

from selenium import webdriver
from time import sleep
from PIL import Image
from selenium.webdriver import ActionChains
#超级鹰下载示例代码
import requests
from hashlib import md5
class Chaojiying_Client(object):
    def __init__(self, username, password, soft_id):
        self.username = username
        password =  password.encode('utf8')
        self.password = md5(password).hexdigest()
        self.soft_id = soft_id
        self.base_params = {
    
    
            'user': self.username,
            'pass2': self.password,
            'softid': self.soft_id,
        }
        self.headers = {
    
    
            'Connection': 'Keep-Alive',
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
        }

    def PostPic(self, im, codetype):
        """
        im: 图片字节
        codetype: 题目类型 参考 http://www.chaojiying.com/price.html
        """
        params = {
    
    
            'codetype': codetype,
        }
        params.update(self.base_params)
        files = {
    
    'userfile': ('ccc.jpg', im)}
        r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
        return r.json()

    def ReportError(self, im_id):
        """
        im_id:报错题目的图片ID
        """
        params = {
    
    
            'id': im_id,
        }
        params.update(self.base_params)
        r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
        return r.json()
#设置驱动
bro = webdriver.Chrome('./chromedriver')
#获取网页url
bro.get('https://kyfw.12306.cn/otn/resources/login.html')
sleep(1)
#标签定位到账号登陆,输入账号密码
login_in = bro.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
login_in.click()
sleep(2)
#下载验证码图片并保存
#使用bro.save_screenshot('./12306.jpg')进行整张页面的截取并存到本地
bro.save_screenshot('./12306.png')
#确定验证码图片的左上角和右下角坐标(确定裁剪区域)
code_img_ele = bro.find_element_by_xpath('//*[@id="J-loginImg"]')#定位图片
location = code_img_ele.location #验证码图片的左上角坐标下x,y
print(location)
size = code_img_ele.size    #验证码图片的长和宽
print(size)
#确定左上角和右下角坐标
rangle =(int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height']))
#验证码图片区域确定下来了
#进行分割
i = Image.open('./12306.png')
code_ing_name = ('./12306yanzhengma.png')
#crop根据指定区域进行裁剪
frame = i.crop(rangle)
frame.save(code_ing_name)
#识别验证码图片
chaojiying = Chaojiying_Client('a1372431588', '970110yy', '905838')	#用户中心>>软件ID 生成一个替换 96001
im = open('./12306yanzhengma.png', 'rb').read()													#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(chaojiying.PostPic(im, 9004)['pic_str'])
sleep(2)
result = chaojiying.PostPic(im, 9004)['pic_str']
all_list =[]#要存储即将被点击的点的坐标[[x1,y1],[x2,y2]]
if '|' in result:
    list_1 = result.split('|')
    print(list_1)
    count_1=len(list_1)
    print(count_1)
    for i in range(count_1):
        xy_list = []
        x = int(list_1[i].split(',')[0])
        y = int(list_1[i].split(',')[1])
        xy_list.append(x)
        xy_list.append(y)
        all_list.append(xy_list)
else:
    x = int(result.split(',')[0])
    y = int(result.split(',')[1])
    xy_list = []
    xy_list.append(x)
    xy_list.append(y)
    all_list.append(xy_list)
print(all_list)
code_img = bro.find_element_by_xpath('//*[@id="J-loginImg"]')
action = ActionChains(bro)
for l in all_list:
    x = l[0]
    y = l[1]
    ActionChains(bro).move_to_element_with_offset(code_img,x,y).click().perform()
username = bro.find_element_by_id('J-userName')
username.send_keys('a1372431588')
sleep(2)
passward = bro.find_element_by_id('J-password')
passward.send_keys('970110yy')
sleep(2)
#点击登录按钮
login = bro.find_element_by_id('J-login')
login.click()

sleep(5)
bro.quit()

Les commentaires dans le code sont très clairs, je pense que tout le monde peut le comprendre. Vous pouvez vous référer à l'article précédent pour l'utilisation de Super Eagle. L'image du code de vérification ici est principalement destinée aux opérations de capture d'écran. Une fois que la page entière est constituée de captures d'écran, le code de vérification est défini. Segmentez la zone où se trouve l'image, puis lisez-la et cliquez pour terminer la reconnaissance d'image du code de vérification.

Je suppose que tu aimes

Origine blog.csdn.net/qwerty1372431588/article/details/106735934
conseillé
Classement