selenium和playwright爬虫linkedIn公共页 Java版

一、selenium

1、pom文件依赖引入:

<groupId>org.seleniumhq.selenium

<artifactId>selenium-java

<version>3.141.59

2、window系统下载与chrome浏览器版本相同的chromedriver,如果已有的话,略过。

Linux系统安装google-chrome-stable,下载与浏览器相同版本的chromedriver,

google-chrome-stable安装成功后,如图

image

chromedriver解压后给予执行权限chmod +x /opt/chrome/chromedriver

3、代码环节

        System.getProperties().setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");       // 设置下载的chromedriver路径

        ChromeOptions chromeOptions =new ChromeOptions();
        chromeOptions.addArguments("--disable-dev-shm-usage");         
        chromeOptions.addArguments("--incognito");                    // 隐身模式打开浏览器,原因是LinkedIn非隐身模式打开用户公共页会跳转到登录页
        chromeOptions.addArguments("--disable-gpu");               // 禁用gpu,部署到服务器采用无头模式
        chromeOptions.addArguments("--headless");                  // 浏览器无头模式运行
        chromeOptions.addArguments("--no-sandbox");         
        chromeOptions.addArguments("--proxy-server=http://localhost:7890");       // LinkedIn需要梯子代理访问,不然访问到的是很简略的信息,没有有用信息
        ChromeDriver chromeDriver = new ChromeDriver(chromeOptions);
        chromeDriver.get(url);                                          // 访问url

        Thread.sleep(9500);                                        // 打开页面后需要时间等待页面加载完成,加载时间需要看网络速度自定义

        WebElement element = chromeDriver.findElement(By.className("contextual-sign-in-modal__modal-dismiss-icon"));   // 通过findElement方法定位位置,可通过标签中class、id、tag,xpath、文本等方式找到元素位置,并获得对应的文本内容进行爬取

        String headline = chromeDriver.findElement(By.className("top-card-layout__headline")).getText();     // 获取class="top-card-layout__headline"的文本内容,即为用户的headline信息,其他内容同理
        chromeDriver.executeScript("arguments[0].scrollIntoView();", element);       // 执行js脚本,页面滚动到指定element位置,图片信息需要模拟滚动到页面可看的位置才会加载真正的图片,不然读取到的都是默认图片。 
        Thread.sleep(50);
         // LinkedIn工作经历中有展开按键,需要定位到该元素,执行js操作将展开按键滑动到页面中,调用点击方法获取展开的信息
         if (element.getText().contains("展开") || element.getText().contains("Show more")){
               element.findElement(By.className("show-more-less-text__button")).click();
         }
        ...
        chromeDriver.quit();          // 处理完后关闭释放资源

LinkedIn工作经历中展开按键,


未展开.png

展开后.png

具体的提取内容根据需要灵活处理。

二、playwright

  1. 依赖包
       <dependency>
           <groupId>com.microsoft.playwright</groupId>
           <artifactId>playwright</artifactId>
           <version>1.30.0</version>
       </dependency>
  1. playwright相比selenium不需要配置环境,运行程序后会自动下载所需文件,playwright打开页面后会自动等待页面加载。如果要获取某个元素,但该页面还没有加载完成时,在selenium中会马上返回NoSuchElementExceptionc错误,在playwright中默认会等待30秒,若在此时间内加载完成则成功返回,否则超时报错。相比selenium在页面DOM加载这个时间是相对可控的。

  2. 代码环境

        try (Playwright playwright = Playwright.create()){
            BrowserType.LaunchOptions launchOptions = new BrowserType.LaunchOptions();
            launchOptions.setChannel("firefox");                                            // 选用二进制版的火狐浏览器
            launchOptions.proxy = new Proxy("http://IP:port");                              // 代理服务器设置
            Browser browser = playwright.firefox().launch(launchOptions);
            Page page = browser.newPage();
            page.navigate(url);                                                           // 访问url

            String fullName = page.locator(".top-card-layout__title").textContent().trim();            // locator定位器方法,这里是获取class="top-card-layout__title"的元素,textContent()获取文本内容
            System.out.println("姓名:"+fullName);

             try{
                  locator.locator(".show-more-less-text__button--more").waitFor(new Locator.WaitForOptions().setTimeout(100));    //设置等待该元素的时间为100毫秒,超时后未找到该元素,抛出异常
                  locator.locator(".show-more-less-text__button--more").click();            // 点击展开按键
               }catch (Exception e){
                 System.out.println("没有展开button");
             }
        }

locator定位器支持多种定位方式,可查阅官方文档https://playwright.dev/java/docs/locators。爬虫这种事还是python代码更简洁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354