访问这个网站首先要解决qiang的问题,这里就跳过了
重点:
1、该网站手机号可以重复注册,但是应该有一个预警机制,将失效的账号以邮件的方式发出来
2、爬取该网站最好尽量多的备手机号,100往上最好
3、如果手动注册最好将浏览器的语言改成英文,中文状态下连续注册会有限制
这里上传一个注册脚本,免去了手动注册,但是手机验证码需要手动加入,如果有猫池的话比较好
注册成功后会将cookie打印出来,可以保存到文件或redis中,轮询调用
# -*- coding: utf-8 -*-import time
import random
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from lxml import etreefrom sns_spider.config.settings import *# 使用谷歌驱动
class SeleniumChrome(object):def __init__(self):options = webdriver.ChromeOptions()options.add_argument('lang=en')self.driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,chrome_options=options,desired_capabilities=None)self.driver.maximize_window()self.driver.set_page_load_timeout(60)self.driver.set_script_timeout(60)self.currentUrl = Noneself.pageSource = Nonedef getDetail(self, url):"""获取详情页源码"""self.driver.get(url)self.driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')resp = self.driver.page_sourcehtml = etree.HTML(resp)return htmldef close(self):"""关闭chromedirver驱动"""self.driver.quit()class RegisterInsAccount(object):"""模拟登录注册ins账号"""def __init__(self):self.url = "https://www.instagram.com/accounts/emailsignup/"self.sele = SeleniumChrome()def start_requets(self, number, fullname, username, password):driver = self.sele.driverdriver.get(self.url)time.sleep(3)driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')# 手机号elem_number = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@name="emailOrPhone"]')))if elem_number: elem_number.send_keys(number)time.sleep(1)# 账号名称elem_fullname = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@name="fullName"]')))if elem_fullname: elem_fullname.send_keys(fullname)time.sleep(1)# 用户名称elem_username = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@name="username"]')))if elem_username: elem_username.send_keys(username)time.sleep(1)# 密码elem_password = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@name="password"]')))if elem_password: elem_password.send_keys(password)time.sleep(1)# 提交按钮elem_submit = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//button[text()="Sign up"]')))if elem_submit: elem_submit.click()time.sleep(5)# 获取月month = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//select[@title="Month:"]')))s1 = Select(month)s1.select_by_index(random.choice(range(1, 13)))time.sleep(1.5)# 获取日day = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//select[@title="Day:"]')))s2 = Select(day)s2.select_by_index(random.choice(range(1, 28)))time.sleep(1.5)# 获取年year = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//select[@title="Year:"]')))s3 = Select(year)s3.select_by_index(random.choice(range(17, 27)))# 点击下一步elem_xiayibu = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//button[text()="Next"]')))if elem_xiayibu: elem_xiayibu.click()time.sleep(5)# 输入验证码elem_code = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@name="confirmationCode"]')))if elem_code:code = input("请输入验证码:")if code == 1:elem_chongshi = driver.find_element_by_xpath('//button[text()="Request New Code"]')if elem_chongshi: elem_chongshi.click()elem_code.send_keys(code)time.sleep(1)# 点击确认elem_queren = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//button[text()="Confirm"]')))if elem_queren: elem_queren.click()time.sleep(10)cookies = driver.get_cookies()cookie = ""for i in cookies:cookie += i['name'] + "=" + i['value'] + "; "if "sessionid" in cookie:login_account = {"numbers": number.lstrip("+86"),"user": fullname,"cookies": cookie.strip('; ')}print(login_account)driver.quit()else:login_account = {"numbers": number.lstrip("+86"),"user": fullname,}print(login_account)print("没有获取到sessionId,重新获取*************")def run(self):try:number = "+86" + input("请输入电话号码:")fullname = input("请输入全称:")username = fullnamepassword = fullname + "midu"self.start_requets(number, fullname, username, password)except Exception as e:print(e)if __name__ == '__main__':obj = RegisterInsAccount()obj.run()