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

Java爬虫攻略:应对JavaScript登录表单

16yun (2).png

问题背景

在进行网络抓取数据时,经常会遇到需要登录的网站,特别是使用JavaScript动态生成登录表单的情况。传统的爬虫工具可能无法直接处理这种情况,因此需要一种能够模拟用户行为登录的情况解决方案。
在实际项目中,我们可能需要从一些需要登录的网站上获取数据,比如京东、淘宝等电商网站,这就需要我们编写一个爬虫程序来模拟用户登录并获取所需数据。但是,由于这些网站通常采用JavaScript动态生成的登录表单,传统的爬虫工具可能无法直接处理,因此我们需要一种更专业的解决方案。

项目需求场景

假设我们需要编写一个Java爬虫程序,用于登录京东网站并获取特定商品的价格信息。由于京东网站采用了JavaScript动态生成的登录表单,传统的爬虫工具无法直接处理该情况,因此我们需要一个能够模拟登录用户行为的解决方案。

遇到的问题

在尝试使用传统的Java爬虫工具进行京东网站数据抓取时,发现无法直接处理JavaScript动态生成的登录表单,导致无法完成登录操作,进而无法获取所需的商品价格信息。这就需要我们寻找一种更专业的解决方案,方便能够顺利地模拟用户登录并获取数据。

解决方案

使用Selenium进行模拟登录

Selenium是一个用于Web应用程序测试的工具,也可以用于模拟用户在浏览器中的操作。我们可以利用Selenium来模拟用户打开浏览器、输入用户名和密码、点击登录按钮等操作,从而实现对JavaScript登录表单的处理。
在我们的示例代码中,我们使用了Chrome浏览器作为演示,首先创建一个ChromeDriver实例,打开京东网站,找到登录链接并点击,然后找到用户名和密码的输入框,输入相应的信息,最后点击登录按钮。这样就可以模拟用户登录京东网站。

// 示例代码
WebDriver driver = new ChromeDriver();
driver.get("https://www.jd.com/");
WebElement loginLink = driver.findElement(By.linkText("你好,请登录"));
loginLink.click();
WebElement username = driver.findElement(By.id("loginname"));
username.sendKeys("your_username");
WebElement password = driver.findElement(By.id("nloginpwd"));
password.sendKeys("your_password");
WebElement loginButton = driver.findElement(By.id("loginsubmit"));
loginButton.click();
使用Scrapy-Selenium扩展

Scrapy是一个强大的Python爬虫框架,而Scrapy-Selenium是一个Scrapy的扩展,可以与Selenium集成,实现在Scrapy爬虫中使用Selenium进行页面操作。虽然Scrapy本身是Python编写的,但是可以通过Jython或者我们使用Python调用Java程序的方式来实现在Java环境中使用Scrapy-Selenium。
在我们的示例中,我们将使用Scrapy-Selenium扩展来处理JavaScript登录表单。我们首先创建一个ChromeOptions实例,并设置代理信息,然后创建一个ChromeDriver实例,将代理信息应用到ChromeDriver的选项中,最后打开京东网站并进行其他操作。

// 示例代码
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;public class JdPriceProcessor implements PageProcessor {private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);@Overridepublic void process(Page page) {String proxyHost = "www.16yun.cn";String proxyPort = "5445";String proxyUser = "16QMSOML";String proxyPass = "280651";ChromeOptions options = new ChromeOptions();Proxy proxy = new Proxy();proxy.setHttpProxy(proxyHost + ":" + proxyPort);proxy.setSslProxy(proxyHost + ":" + proxyPort);proxy.setSocksProxy(proxyHost + ":" + proxyPort);proxy.setSocksUsername(proxyUser);proxy.setSocksPassword(proxyPass);options.setCapability("proxy", proxy);WebDriver driver = new ChromeDriver(options);driver.get("https://www.jd.com/");// 其他操作}@Overridepublic Site getSite() {return site;}
}

相关文章:

Java爬虫攻略:应对JavaScript登录表单

问题背景 在进行网络抓取数据时,经常会遇到需要登录的网站,特别是使用JavaScript动态生成登录表单的情况。传统的爬虫工具可能无法直接处理这种情况,因此需要一种能够模拟用户行为登录的情况解决方案。 在实际项目中,我们可能需要…...

基于单片机的电子密码锁设计

1.设计任务 利用AT89C51单片机为核心控制元件,设计一个简易的电子密码锁,可设置四位密码,输入错误三次,报警灯亮起(红灯亮起),输入正确,绿灯闪烁三次。可通过LCD显示屏查看密码&…...

ChatGPT学习笔记

1 ChatGPT架构图 (ChatGPT_Diagram.svg来自于【OpenA | Introducing ChatGPT】) 2 模型训练 ChatGPT在训练时使用了PPO方法;...

One-to-Few Label Assignment for End-to-End Dense Detection阅读笔记

One-to-Few Label Assignment for End-to-End Dense Detection阅读笔记 Abstract 一对一(o2o)标签分配对基于变换器的端到端检测起着关键作用,最近已经被引入到全卷积检测器中,用于端到端密集检测。然而,o2o可能因为…...

Ubuntu22.04 使用Docker部署Neo4j出错 Exited(70)

项目场景: 最近需要使用Neo4j图数据库,因此打算使用docker部署 环境使用WSL Ubuntu22.04 问题描述 拉下最新Neo4j镜像,执行命令部署 启动容器脚本 docker run -d -p 7474:7474 -p 7687:7687 \ --name neo4j \ --env "NEO4J_AUTHneo…...

【数据分析 | Numpy】Numpy模块系列指南(一),从设计架构说起

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...

多人聊天室

多人聊天包 由于要先创建服务面板,接收客户端连接的信息,此代码使用顺序为先启动服务端,在启动客户端,服务端不用关,不然会报错。多运行几次客户端,实现单人聊天 1.创建服务面板 package yiduiy;import j…...

智慧园区可视化综合管理平台建设方案,智能化、数字化才是关键

园区作为城市的基本单元,是经济发展的重要载体。随着我国经济的快速发展,各类工业园区、办公园区等园区的规划建设也越来越多。伴随着互联网新兴技术的发展和应用,智慧园区已成为当今城市规划和社会发展的关注焦点,今天我们来介绍…...

kepler.gl部署在线说明文档

1 概述 1.1 介绍 1、Kepler.gl 是一个强大的开源地理空间分析工具,用于大规模数据集的可视化。它由 Uber 的数据可视化团队开发,并且是基于 Web 技术构建的。Kepler.gl 涉及到以下几个主要技术领域: WebGL: Kepler.gl 通过 WebGL 进行渲染…...

Java程序员,你掌握了多线程吗?

文章目录 01 多线程对于Java的意义02 为什么Java工程师必须掌握多线程03 Java多线程使用方式04 如何学好Java多线程写作末尾 摘要:互联网的每一个角落,无论是大型电商平台的秒杀活动,社交平台的实时消息推送,还是在线视频平台的流…...

Android 11.0 长按按键切换SIM卡默认移动数据

Android 11.0 长按按键切换SIM卡默认移动数据 近来收到客户需求想要通过长按按键实现切换SIM卡默认移动数据的功能,该功能主要通过长按按键发送广播来实现,具体修改参照如下: 首先创建广播,具体修改参照如下: /vend…...

Kafka集群调优+能力探底

一、前言 我们需要对4个规格的kafka能力进行探底,即其可以承载的最大吞吐;4个规格对应的单节点的配置如下: 标准版: 2C4G 铂金版: 4C8G 专业版: 8C16G 企业版: 16C32G 另外,一般…...

netcore swagger 错误 Failed to load API definition

后端接口报错如下: 前端nswag报错如下: 根据网上查询到的资料说明,说一般swagger这种错误都是控制器里有接口代码异常造成的,通常是接口没有加属性Attribute, 比如[HttpPost("Delete")]、[HttpGet("Del…...

UDP Socket API 的讲解,以及回显服务器客户端的实现

文章目录 UDPDatagramSocktet APIDatagramPacket API UDP 客户端服务器实现 UDP 先来认识一下 UDP 的 socket api,两个核心的类:DatagramSocket、DatagramPacket. DatagramSocktet API 是一个 socket 对象。 什么是 socket? 操作系统&…...

数据结构与算法-D7栈实现及应用

顺序栈 具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top完成操作 sqstack.h stack_creat stack_push stack_empty stack_full 1、判断栈是否为空 2、top--,取:data[top1] stack_top stack_clear stack_fre…...

蓝桥杯真题:分巧克力(二分法)-Java版

由题目可知,该题的最终结果具有单调性,边长越大,可分蛋糕越少 可以用二分模板的向右找: 整数二分 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main {static int n,k; //n个块蛋糕,k个学生static int N 10…...

c++面试题

1.static的使用 1)修饰局部变量:在函数内部使用static修饰局部变量,会使它成为静态局部变量。静态局部变量只会被初始化一次,且只有在第一次调用该函数时才会被初始化,之后每次调用该函数时都会保留上一次的值.从原来…...

高精度加法,减法,乘法,除法(上)(C语言)

前言 加,减,乘,除这些运算我们自然信手捏来,就拿加法来说,我们要用c语言编程算ab的和,只需让sum ab即可,可是这是局限的,我们都知道int的表示的最大值为2147483647(32位…...

C++新经典模板与泛型编程:SFINAE特性的信息萃取

用成员函数重载实现is_default_constructible 首先介绍一个C标准库提供的可变参类模板std::is_default_constructible。这个类模板的主要功能是判断一个类的对象是否能被默认构造(所谓默认构造,就是构造一个类对象时,不需要给该类的构造函数…...

java单人聊天

服务端 package 单人聊天;import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import…...

Linux运维必备四件套:htop、ncdu、tmux、jq实战指南

1. 项目概述:为什么是这四个工具?在Linux服务器的世界里,工具多如牛毛,从系统监控到网络调试,从文件管理到安全加固,每个领域都有几十上百个选择。但真正能在生产环境中长期服役,被无数运维工程…...

Cursor AI插件深度解析:从自动化脚本到智能编程工作流

1. 项目概述:一个为 Cursor 编辑器注入灵魂的 AI 增强插件如果你和我一样,日常开发重度依赖 Cursor 这款“AI 原生”编辑器,那你一定体验过它内置的 AI 对话和代码生成带来的效率提升。但用久了,你可能会发现一些痒点:…...

遥感图像处理实战:用eCognition多尺度分割搞定地物分类(附样本点与特征提取全流程)

遥感图像智能解译实战:eCognition多尺度分割与地物分类全流程解析 清晨的阳光透过窗帘缝隙洒在桌面上,我打开最新接收的卫星影像——这是一片混合了城市建筑、绿地和农田的复杂区域。作为遥感分析师,我们每天面对的都是这样充满信息量的图像&…...

Mastercard开源AI代理工具包:用智能代理重塑支付集成开发体验

1. 项目概述:当开发者遇上Mastercard,一个工具包如何重塑支付集成体验如果你是一名开发者,正在为你的电商平台、SaaS服务或者任何需要处理在线支付的应用程序集成支付功能,那么你大概率绕不开与Mastercard这类全球支付网络的交互。…...

如何快速下载Fansly内容:完整Fansly Downloader使用指南

如何快速下载Fansly内容:完整Fansly Downloader使用指南 【免费下载链接】fansly-downloader Easy to use fansly.com content downloading tool. Written in python, but ships as a standalone Executable App for Windows too. Enjoy your Fansly content offlin…...

电压跟随器:从原理到实战,如何用它解决信号传输的三大难题?

1. 电压跟随器:电子工程师的"信号保镖" 第一次接触电压跟随器时,我正被一个传感器信号传输问题折磨得焦头烂额。当时用STM32采集热电偶温度信号,明明传感器端测量正常,但MCU接收到的数值总是飘忽不定。直到前辈指着原理…...

MKS Robin Nano Marlin 2.0固件架构解析与性能调优指南

MKS Robin Nano Marlin 2.0固件架构解析与性能调优指南 【免费下载链接】Mks-Robin-Nano-Marlin2.0-Firmware The firmware of Mks Robin Nano, based on Marlin-2.0.x, adding the color GUI. 项目地址: https://gitcode.com/gh_mirrors/mk/Mks-Robin-Nano-Marlin2.0-Firmwa…...

如何高效管理光盘镜像:WinCDEmu虚拟光驱专业使用指南

如何高效管理光盘镜像:WinCDEmu虚拟光驱专业使用指南 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu WinCDEmu是一款功能强大的开源虚拟光驱软件,专为Windows系统设计,提供高效的光盘镜像挂载与管…...

Visara:可视化代码仓库分析工具的设计原理与工程实践

1. 项目概述:一个面向开发者的视觉化代码仓库分析工具最近在和一些团队做代码评审和架构梳理时,我常常遇到一个痛点:面对一个陌生的、动辄几十上百个文件的代码仓库,如何快速理解它的整体结构、模块依赖和关键文件?传统…...

AI——Dify高级RAG优化

高级RAG优化简介一、基础RAG的核心痛点二、全流程高级优化技术(一)索引构建阶段:高质量数据底座(二)检索阶段:精准召回与重排(三)检索后阶段:上下文压缩与提纯&#xff0…...