GVKun编程网logo

带有javascript下一页的Scrapy和Selenium不起作用(js实现上一页下一页)

16

本文将为您提供关于带有javascript下一页的Scrapy和Selenium不起作用的详细介绍,我们还将为您解释js实现上一页下一页的相关知识,同时,我们还将为您提供关于javascriptsel

本文将为您提供关于带有javascript下一页的Scrapy和Selenium不起作用的详细介绍,我们还将为您解释js实现上一页下一页的相关知识,同时,我们还将为您提供关于javascript selenium全套教程发布、javascript – Bootstrap scrollspy在标签内不起作用?、javascript – jQuery select()方法不起作用、javascript – Phoenix Link方法:: delete在Bootstrap下拉列表中不起作用的实用信息。

本文目录一览:

带有javascript下一页的Scrapy和Selenium不起作用(js实现上一页下一页)

带有javascript下一页的Scrapy和Selenium不起作用(js实现上一页下一页)

如何解决带有javascript下一页的Scrapy和Selenium不起作用?

我将抓取下一页的所有职位名称,但它只会抓取第一页。该 url 仅包含四页,每页包含 25 个项目,但我从未到达下一页。

import scrapy
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions as EC
from shutil import which
from time import sleep
from scrapy.selector import Selector
from selenium.common.exceptions import NoSuchElementException


class JobSpider(scrapy.Spider):
    name = "joblists"
    start_urls = ["https://epco.taleo.net/careersection/alljobs/jobsearch.ftl"]

    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(20)
        
    def parse(self,response):
        
        self.driver.get(response.url)
        sleep(5)

        try:
            wait = webdriverwait(self.driver,20)
            next_button = wait.until(EC.element_to_be_clickable((By.XPATH,''(//*[contains(@id,"requisitionListInterface.pagerDivID4019.panel")])[7]/span/a'')))
            self.driver.execute_script("return arguments[0].scrollIntoView();",next_button)
            next_button.click()
            #sleep(5)
        except NoSuchElementException:
            sleep(5)
                
        
        resp = Selector(text = self.driver.page_source)
        titles = resp.xpath(''//*[@https://www.jb51.cc/tag/cop/" target="_blank">copy ftlrow"]'') 
        for title in titles:
            yield{
                ''Title'': title.xpath(''.//*[@]/a/text()'').get()
            }
        #self.driver.quit()
            
     

解决方法

在选择任何技术之前,您应该查看 F12->网络。当您点击页面轮播中的“下一步”时,您应该会看到一个发布请求。

然后,当您了解它的工作原理时,您可以选择一个库。在这里,我只是建议你请求 & beautifulsoup

下面的两个函数(cleanData()groupData() 用于清理和格式化收集到的数据周围的垃圾。

import requests as rq
from bs4 import BeautifulSoup as bs
import re

def cleanData(datax,elements):
    new = []
    flagx = True
    for row in datax:
        for el in elements:
            if row.startswith(el):
                flagx = False
                break

        if re.match(r"\!\d+\!",row):
            flagx = False

        if flagx == True:
            new.append(row)
        flagx = True
    return new

def groupData(datax):
    new = []
    for i in range(5,len(datax),6):
        new.append((datax[i-5][1:-1],datax[i][1:-1],datax[i-1][1:-1]))
    return new

这是主要的帖子请求。您需要在负载中循环 "rlPager.currentPage" 的值。例如,我将其设置为“3”。

url = "https://epco.taleo.net/careersection/alljobs/jobsearch.ajax"

headers = {"User-Agent": "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"}

payload = {"iframemode":"1","ftlpageid":"reqListBasicPage","ftlinterfaceid":"requisitionListInterface","ftlcompid":"rlPager","jsfCmdId":"rlPager","ftlcompclass":"PagerComponent","ftlcallback":"ftlPager_processResponse","ftlajaxid":"ftlx1","rlPager.currentPage":"3","lang":"en"
            }
resp = rq.post(url,headers=headers,data=payload)
soup = bs(resp.content,"lxml")

data = soup.find_all("td")[0].text

garbage_elements = ["!ftl","ftl","!!","!false!","!true!"," ","! !","!list","!rlPager","!Go to","!Re-apply","!Apply","!Submission","!Add ","!https","!true","!The list of","!Next","!Previous","! "]
data_cleaned = groupData(cleanData(data.split(''|''),garbage_elements))

len(data_cleaned) 

data_cleaned 包含您需要的第 3 页数据。设置一个循环,您将获得所有页面数据。

[(''000BBE'',''Manager,Fleet Administration'',''Jun 30,2021''),(''000BCP'',''Technician,Measurement (Farmington,NM)'',''Jul 19,(''000B92'',''Driver - ETC (Breaux Bridge)'',''Jun 2,(''000B5D'',''Operator,Plant Trainee (Orla,TX)'',''Apr 15,(''000B7B'',''Deckhand,Inland'',''Jun 28,(''000B5C'',Plant Trainee (Carlsbad,''Apr 26,(''000BCE'',''Accountant'',''Jul 12,(''000BD3'',''Engineer,Senior Project'',(''000BE5'',''Gauger (Midland,''Jul 21,(''000BA1'',''Specialist,Senior Network Architecture'',''Jun 11,(''000BCW'',Senior Measurement'',''Jul 15,.......
 (''000B6Z'',''Driver - ETC (Baytown,''Apr 30,(''000B83'',Senior Systems'',''May 26,(''000BA2'',Lead IT Security Engineering'',2021'')]

javascript selenium全套教程发布

javascript selenium全套教程发布

为什么有这个系列

目前javascript生态非常丰富,越来越多的人开始用js去做前端的ui测试了。而selenium是web ui测试的标准解决方案,所以一套js的selenium教程是很有必要的。

阅读地址

本教程在测试教程网首发,由于会保持更新,所以禁止转载

请点击这里进行阅读。

目录

(一)初始化环境
(二)实战: 最简单的自动化脚本
(三)查看文档
(四)通过id去定位页面上的元素
(五)通过name去定位页面上的元素
(六)通过className去定位页面上的元素
(七)通过linkText去定位页面上的元素
(八)通过css选择器去定位页面上的元素
(九)通过xpath去定位页面上的元素
(十)模拟键盘按键
(十一)ActionSequence
(十二)定位一组元素
(十三)切换frame
(十四)处理下拉列表 select
(十五)切换窗口(标签)
(十六)执行javascript
(十七)alert confirm 和 prompt
(十八)截图
(十九)wait和sleep
(二十)unitl
(二十一)断言

javascript – Bootstrap scrollspy在标签内不起作用?

javascript – Bootstrap scrollspy在标签内不起作用?

下面是我的代码,但我知道它没有任何问题,因为当它从标签中取出时它可以正常工作.也没有重复的Id,我认为可能导致问题.无论如何,如果有人有任何想法或变通办法那将是伟大的!

最佳答案
这不是Bootstrap中的错误.发生的事情是,当您的页面加载时,带有scrollspy元素的选项卡将被隐藏.因此,当scrollspy插件试图找到每个< h4 id =“foo”>的$.position()时在你的滚动div中,他们调用return {top:0,left:0}.这就是你滚动时看到闪烁的原因;该插件认为所有滚动目标都处于相同位置.

如果您查看documentation for the scrollspy plugin,您会看到它提到如果您要从DOM添加或删除元素,则需要调用.scrollspy(‘refresh’)函数,以便插件可以重新评估各种位置滚动目标.

也就是说,您需要做的是等到加载了scrollspy内容的选项卡,然后调用刷新函数,就像这样.请注意,我还将所有单独的单击处理程序组合到一个处理程序中

$(function(){
    $('.nav-tabs li a').click(function(e) {
        e.preventDefault();
        $(this).tab('show');

        // If we are showing the scrollspy tab,let the
        // plugin refresh itself so it can function properly
        if(this.id === 'scrotab') {
            $(this).on('shown',function(){ 
                $('#scrollspy-example').scrollspy('refresh'); 
            });
        }
    });
});

此外,而不是在< div id =“scrollspy-example”>上使用data-offset =“300”属性.在元素中,您需要使用CSS将元素的位置设置为相对:

#scrollspy-example {
    position: relative;
}

这是一个有效的jsfiddle演示:

http://jsfiddle.net/GyMYE/3/

javascript – jQuery select()方法不起作用

javascript – jQuery select()方法不起作用

我需要获取select标签中所有选定选项的数据,为此我使用onclick()函数,该函数仅提供单击选项的数据.但是如果用户选择CTRL * A的所有选项,则不会收到任何数据.我试过使用在这种情况下不起作用的select().

//jQuery onclick()
$('select[name=sensors]').on('click', function(){
    $('#demo').text($('select[name=sensors]').val());
});

//jQuery select()
$('select[name=sensors]').select(function(){
    $('#demo2').text($('select[name=sensors]').val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select type='list' name='sensors' multiple>
  <option value= "e11">e11</option>
  <option value= "e12">e12</option>
  <option value= "e13">e13</option>
  <option value= "e14">e14</option>
</select>
<!--jQuery onclick()-->
<div id="demo"></div>
<!--jQuery select()-->
<div id="demo2"></div>

解决方法:

不要在点击时绑定,而是在更改时绑定.这样,即使是来自其他类型的交互的更改也会被考虑在内:

$('select[name=sensors]').on('change', function(){
    $('#demo').text($('select[name=sensors]').val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select type='list' name='sensors' multiple>
  <option value= "e11">e11</option>
  <option value= "e12">e12</option>
  <option value= "e13">e13</option>
  <option value= "e14">e14</option>
</select>
<div id="demo"></div>

至于你对select的实验,这是the documentation所说的:

The select event is sent to an element when the user makes a text
selection inside it. This event is limited to
fields and Boxes.

这里根本不相关,因为用户没有选择文本而是选项.

javascript – Phoenix Link方法:: delete在Bootstrap下拉列表中不起作用

javascript – Phoenix Link方法:: delete在Bootstrap下拉列表中不起作用

在我的凤凰应用程序中,<%= link ...,方法:: delete%>在Bootstrap下拉列表中不起作用

<ul>
    <%= if !@conn.assigns.current_user do %>
      <li> <%= link "Log In",to: session_path(@conn,:new) %></li>
    <% else %>
      <li>
        <a href="#"data-toggle="dropdown">
          Hi!,<%= @conn.assigns.current_user.username %>
          <b></b>
        </a>
        <ul>
          <li><%= link "Log out",:delete,@conn.assigns.current_user),method: "delete" %></li>
          <li> <%= link "Log In",:new) %></li>
        </ul>
      </li>
    <% end %>
  </ul>

但是当我在“下拉菜单”之外制作时,它的效果很好.

当我改变<%= link ...%>到<%=按钮...%>,它也可以正常工作!!

我的brunch.js包含了插件中的sass

plugins: {
  babel: {
    // Do not use ES6 compiler in vendor code
    ignore: [/web\/static\/vendor/]
  },sass: {
    options: {
      includePaths: ["node_modules/bootstrap-sass/assets/stylesheets"],// tell sass-brunch where to look for files to @import
      // minimum precision required by bootstrap-sass
      //precision: 8
    },precision: 8
  },copycat: {
    "fonts": ["node_modules/bootstrap-sass/assets/fonts/bootstrap"]   // copy node_modules/bootstrap-sass/assets/fonts/bootstrap/* to priv/static/fonts/
  }
},...
...

npm: {
  enabled: true,whitelist: ["phoenix","phoenix_html","jquery"],globals: { // bootstrap-sass' JavaScript requires both '$' and 'jQuery' in global scope
    $: 'jquery',jQuery: 'jquery',bootstrap: 'bootstrap-sass' // require bootstrap-sass' JavaScript globally
  }
}

我认为问题与javascript有关,但我不知道如何修复它.

有人有同样的问题吗?谢谢!

解决方法

问题来自Bootstrap的JavaScript部分.

这是bootstrap.js中的违规行(v3.3.7中的第910行):

.on('click.bs.dropdown.data-api','.dropdown form',function (e) { e.stopPropagation() })

要使您的链接有效,您必须不要将链接包装在< form>中通过在app.js中包含以下代码,您可以删除此事件处理程序:

$(document).off('click.bs.dropdown.data-api','.dropdown form');

我们今天的关于带有javascript下一页的Scrapy和Selenium不起作用js实现上一页下一页的分享就到这里,谢谢您的阅读,如果想了解更多关于javascript selenium全套教程发布、javascript – Bootstrap scrollspy在标签内不起作用?、javascript – jQuery select()方法不起作用、javascript – Phoenix Link方法:: delete在Bootstrap下拉列表中不起作用的相关信息,可以在本站进行搜索。

本文标签: