精华内容
下载资源
问答
  • webbrowser获取动态网页元素

    千次阅读 2014-03-08 07:52:31
    写第一个博客前先啰嗦介绍下我本人:我其实是个硬件工程师,只是喜欢编程,觉得程序可以大大释放劳动力,所以偶尔会写些小程序,解决日常工作... 通过webbrowser获取静态网页元素比较容易,而要获取动态网页元素就...

    写第一个博客前先啰嗦介绍下我本人:我其实是个硬件工程师,只是喜欢编程,觉得程序可以大大释放劳动力,所以偶尔会写些小程序,解决日常工作中的小问题,而我写的小程序,都是自动化方向的多(例如本次要实现的自动填表),而且对编程中遇到的问题,会不懈地寻找答案,也因为不是专业程序员,所以一些在大家看来很简单的问题,对我来说就变得不简单。

     通过webbrowser获取静态网页元素比较容易,而要获取动态网页元素就不太容易了,在网上搜索了很久,看了很多文章,最后终于找到答案。

    这篇文章:《[参考资料]如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站》  让我学会了用浏览器中的开发人员工具(IE9的F12和Chrome的Ctrl+Shift+I)-网页分析的利器,从而坚定地知道,动态网页元素是一定可以获取的,只是还未找到方法而已。

    其实这篇文章:《C# WebBrowser 获取被点击的对像》  里面也提到了解决办法,只是我漏掉了而已。

    直到看了这篇文章:《如何获取 WebBrowser.Document 中某命名空间中的元素?》  才真正解决了我要解决的问题,因为里面的网页例子与我要分析的网页一模一样。

    技术的关键点是这行代码:webBrowser1.Document.Window.Frames("frm_xxx").Document.Forms(0).InnerHtml

    而不是像这个帖子:《请教高手,关于WebBrowser控制Jsp网页元素和获取元素的数据,在线等..》  里5楼说的:WebBrowser1.Document.frames.Item(frameindex).Document.documentElement.outerHTML 

     

    根据关键代码,我写了个递归调用函数,用来查找动态网页元素,该函数的缺点是,遇到同一层次的,没有Id、InnerText、Name、title、classname、value,或这些属性值一样的网页元素时,只能返回第一个匹配的网页元素。解决的办法是找到同一层的网页元素后再通过.Parent  、NextSibling、Children来访问。

    Function FindHtmlElement(ByVal FindText As String, ByVal doc As HtmlDocument, ByVal cTagName As String, ByVal cGetAttribute As String, Optional ByVal StrictMatching As Boolean = False) As HtmlElement 
            'cTagName:检索具有指定html 标记的元素,标记需要输入完整的,缺省时查找所有。 
            '例如:<input class="button" type="submit" value=提交style="cursor:hand">,不能只输入"i",需要输入"input" 
            'cGetAttribute :比较的属性类型,取值为:Id、InnerText、Name、title、classname、value、 
            'Id、InnerText可以通过GetAttribute获取,也可以通过HtmlElement.Id、HtmlElement.InnerText获取,所以代码简化为用GetAttribute获取。 
            'doc:WebBrowserExt1.Document 
            'GetAttribute("classname")   '例如显示class="commonTable"的值commonTable 
            'StrictMatching:True严格匹配FindText 
    
            Dim i, k As Integer 
    
            FindHtmlElement = Nothing 
    
            'Step1 
            For i = 0 To doc.All.Count - 1 
                If InStr(doc.All.Item(i).GetAttribute(cGetAttribute), FindText) > 0 _ 
                    And (Not StrictMatching Or InStr(FindText, doc.All.Item(i).GetAttribute(cGetAttribute)) > 0) And (cTagName = "" Or LCase(cTagName) = LCase(doc.All.Item(i).TagName)) Then 
    
                    FindHtmlElement = doc.All.Item(i) 
                    'WriteRunLog("Loop1") 
                    Exit Function                       '找到就退出 
                End If 
            Next 
    
            For k = 0 To doc.Window.Frames.Count - 1 
                '2018.3.14 直接递归调用 
                FindHtmlElement = FindHtmlElement(FindText, doc.Window.Frames.Item(k).Document, cTagName, cGetAttribute, StrictMatching) 
                If Not FindHtmlElement Is Nothing Then  '找到就退出循环 
                    Exit Function 
                End If 
            Next 
    
        End Function 
    

     

    展开全文
  • 通过Chrome DevTools获取网页控件ID

    千次阅读 2018-10-23 21:41:23
    1. 快捷键 ctrl+shift+I 打开DevTools(chrome浏览器) 2. 点击左上角的图标 : 3. 鼠标点击你需要获取id的控件

    1. 快捷键 ctrl+shift+I 打开DevTools(chrome浏览器)

    2. 点击左上角的图标 :

    3. 鼠标点击你需要获取id的控件

    展开全文
  • 2.hierarchyviewer-id获取 hierarchyviewer能获取某些真机-开发机或模拟器上的id,以模拟器为例。 a.打开eclipse,启动已经装好的模拟器。 b.将apk安装到该模拟器 c.进入sdk的tools目录下,双击hierarchyviewer...

    1.monkey recorder--坐标获取(略)

    2.hierarchyviewer-id获取

    hierarchyviewer能获取某些真机-开发机或模拟器上的id,以模拟器为例。

    a.打开eclipse,启动已经装好的模拟器。


    b.将apk安装到该模拟器


    c.进入sdk的tools目录下,双击hierarchyviewer.bat,列出连接的真机或模拟器,加粗的是活动的active,双击加粗的Activity,等待一会加载完毕。会显示Activity中的所有控件的层次结构


    d.激活android模拟器,进入到要获取id的app界面,这时Activity中的所有控件的层次结构要手工进行刷新。先点击左下角的switch to the window selection view回到hierarchyviewe的起始界面,点击refresh按钮,然后点击活动的加粗的Activity。等待一段时间。加载完毕后,可以在右下角位置点击要获取id的控件,可获得id



    展开全文
  • 集合是否包含某些元素获取元素索引位置,元素排序

    判断集合是否包含某个元素

    List

    boolean containsAll(Collection<?> c):如果列表包含指定 collection 的所有元素,则返回 true。
    boolean contains(Object o):如果列表包含指定的元素,则返回 true。实现原理:遍历list中的每一个元素,然后调用每一个元素的equals(obj)方法 ,如果有一个元素的equals方法返回true值,该方法就返回true值,否则返回false。

    某个list中是否包含某个对象,对象的类型是存入的类型。

    // 取得备选课程序列的第0个元素
    Course course = coursesToSelect.get(0);
    //coursesToSelected是否包含course对象,结果是包含                
    coursesToSelect.contains(course));

    创建一个新的对象,此对象与list中的某个对象有相同的属性值,但他们是两个不同的对象,所以调用返回值是false。

    通过对象中的某个属性值判断list中是否包含某个元素,根据方法的原理,需要重写equals方法。

    public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (!(obj instanceof Course))
                return false;
            Course other = (Course) obj;
            if (name == null) {
                if (other.name == null)
                    return true;
                else
                    return false;
            } else {
                if (name.equals(other.name))
                    return true;
                else
                    return false;
            }
        }
    }
    Scanner console= new Scanner(System.in);
    // 提示输入课程名称
    System.out.println("请输入课程名称:");
    String name = console.next();
    Course course2 = new Course();
    course2.name = name;
    System.out.println("备选课程中是否包含课程:" + course2.name + ", "+coursesToSelect.contains(course2));

    Set

    boolean containsAll(Collection<?> c):如果此 set 包含指定 collection 的所有元素,则返回 true。如果指定的 collection 也是一个 set,那么当该 collection 是此 set 的 子集 时返回 true。
    boolean contains(Object o):如果 set 包含指定的元素,则返回 true。实现机制:调用该方法时,先调用每一个元素的hashCode()来访问哈希码,如果哈希码相等,之后在调用equals(obj),如果这两个方法的返回值都是相等,才相等。

    通过对象中的某个属性值判断list中是否包含某个元素,根据方法的原理,需要重写equals方法,和hashCode方法。他们的书写可以通过eclipse快速生成。
    快速生成:打开需要重写的类,在空白处右击–>Source–>Generate hashCode() and equals….,在弹出的页面中勾选作为判断的属性,点击ok即可。

    这里写图片描述
    测试是否包含的方法和list一样。

    List获取元素的索引位置

    int indexOf(Object o) :返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。实现机制:从序列的第0个位置开始,依次循环并调用每一个元素的equals方法和参数对象进行比较,如果某一个元素的equals方法返回true,就把该元素的索引位置返回,多个重复只返回第一次出现的索引位置。
    int lastIndexOf(Object o) :返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1,从尾往头进行遍历。

    if (coursesToSelect.contains(course2))
    System.out.println("课程:" + course2.name + "的索引位置为:" + coursesToSelect.indexOf(course2));

    Map是否包含某个key值或者value值
    boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回 true。
    boolean containsValue(Object value):如果此映射将一个或多个键映射到指定值,则返回 true,与list的contains一样,也需要重写equals(obj)方法。

    public void testContainsKeyOrValue() {
            System.out.println("请输入要查询的学生ID:");
            Scanner console = new Scanner(System.in);
            String id = console.next();
            // 在Map中,用containsKey()方法,来判断是否包含某个Key值
            System.out.println("您输入的学生ID为:" + id + ",在学生映射表中是否存在:"
                    + students.containsKey(id));
            System.out.println("请输入要查询的学生姓名:");
            String name = console.next();
            // 用containsValue()方法,来判断是否包含某个Value值
            if (students.containsValue(new Student(null,name)))
                System.out.println("在学生映射表中,确实包含学生:" + name);
            else
                System.out.println("在学生映射表中不存在该学生!");
        }

    List排序

    Collections工具类:是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,运用其中的sort()排序,排序的前提是排序的元素是可以比较的。
    public static <T extends Comparable<? super T>> void sort(List<T> list):根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable。
    public static void sort(List list,Comparator

    /**
         * 通过Collections.sort()方法,对Integer泛型的List进行排序;
         * 创建一个Integer泛型的List,插入十个100以内的不重复随机整数,
         * 调用Collections.sort()方法对其进行排序
         */
        public void testSort1() {
            List<Integer> integerList = new ArrayList<Integer>();
            // 插入十个100以内的不重复随机整数
            Random random = new Random();
            Integer k;
            for (int i = 0; i < 10; i++) {
                do {
                    k = random.nextInt(100);
                } while (integerList.contains(k));
                integerList.add(k);
                System.out.println("成功添加整数:" + k);
            }
            System.out.println("-------------排序前--------------");
            for (Integer integer : integerList) {
                System.out.println("元素:" + integer);
            }
            Collections.sort(integerList);
            System.out.println("----------------排序后-------------------");
            for (Integer integer : integerList) {
                System.out.println("元素:" + integer);
            }
        }

    String字符串的排序规则:从首字母开始按照0-9,A-Z,a-z的顺序进行大小比较,如果第一个字母相同,则看第二个,之后的比较都是相同的方式进行。

        /**
         * 对String泛型的List进行排序;
         * 创建String泛型的List,添加三个乱序的String元素,
         * 调用sort方法,再次输出排序后的顺序
         */
        public void testSort2() {
            List<String> stringList = new ArrayList<String>();
            stringList.add("microsoft");
            stringList.add("google");
            stringList.add("lenovo");
            System.out.println("------------排序前-------------");
            for (String string : stringList) {
                System.out.println("元素:" + string);
            }
            Collections.sort(stringList);
            System.out.println("--------------排序后---------------");
            for (String string : stringList) {
                System.out.println("元素:" + string);
            }
        }
    

    对其他类型泛型的List进行排序,以Student为例,直接运用sort方法会报错,是因为该方法的前提是必须实现Comparable接口,而Student类没有实现。
    1.使其实现Comparable接口,实现compateTo()方法

    public int compareTo(Student o) {
        //排序的规则,按照id排
        return this.id.compareTo(o.id);
        }
    Collections.sort(studentList);

    2.新建一个类实现Comparator接口并实现compare()方法

    public int compare(Student o1, Student o2) {
       //按照name排   
        return o1.name.compareTo(o2.name);
        }
    Collections.sort(studentList, new StudentComparator());

    Comparable接口-可比较的:默认比较规则
    实现该接口表示:这个类的实例可以比较大小,可以进行自然排序。
    定义了默认的比较规则。
    Comparable接口的实现类必须实现compateTo()方法。
    compareTo()方法返回正数表示大,负数表示小,0表示相等。

    Comparator接口-比较工具接口:临时比较规则
    用于定义临时比较规则,而不是默认比较规则。
    Comparator的实现类必须实现compare()方法。
    Comparable和Comparator都是java集合框架的成员。

    展开全文
  • 该代码在https://blog.csdn.net/ylforever/article/details/80955595的基础上...只需三行代码即可获取excel单元格数据 ParseXlsxExcel excel = new ParseXlsxExcel(); excel.readOneSheet("C:\\Users\\**\\D...
  • 1. Chrome console 中验证xpath F12 Ctrl + f 方法一: element .//*[@id="su"] 方法二: console $x("/html/body/script[1]&...1.如何在Chrome开发者工具或Firefox的Firebug中验证XPath表达式...
  • getElementById ,getElementsByName ,getElementsByTagName 后两个是得到集合,byid只是得到单个对象 getElementById 的用法 举个例子: 网页陶吧 同一页面内的引用方法: 1、使用id: link1.
  • 通过自制js脚本屏蔽网页元素

    千次阅读 2018-06-29 16:09:23
    现如今各类网站已经成为我们日常生活获取信息的一个重要渠道,与此同时,网站上往往也充斥着很多我们不需要的信息,这里通过这篇文章分享下如何通过自制js脚本来屏蔽平时咱们不想看到的网站元素:这里就以咱们csdn...
  • Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的Internet Explorer、Mozilla 和 Firefox 中运行 在...
  • IOS 元素定位工具

    千次阅读 2017-09-05 22:52:47
    1.Appium自带的Inspector工具  2.Macaca的app-inspector工具,具体地址:...获取设备ID  xcrun simctl list  setp2:从命令行启动  app-inspector -u YOUR-DEVICE-ID 3.Xcode自
  • jquery跨域获取元素

    千次阅读 2014-10-30 15:05:56
    1.有时候我们页面中要加入一个或者多个iframe,这个时候难免会需要跨域获取元素,例如,window和iframe间相互获取数据参数, 2.window获取iframe中的某个元素, //引入jquery,frame[i],i指的是页面中frame的index ...
  • 录制web自动化脚本时,最麻烦的一件工作就是给需要检测的Element进行定位。 难在2点: 1.如果需要使用ID定位的话需要开发同志配合,有的时候开发同志会忘记加;...有没有一种能够所点即所得的工具,让我们迅
  • AccessibilityService获取控件id

    千次阅读 2019-12-13 15:12:53
    使用androidSDK自带工具android dev monitor findAccessibilityNodeInfosByText("开启无障碍服务"); findAccessibilityNodeInfosByViewId("com.app.simulator:id/bt_setting");
  • 在Vue中通过自定义指令获取元素

    千次阅读 2017-03-31 08:36:18
    vue.js 是数据绑定的框架,大部分情况下我们都不需要直接操作 DOM Element,但...在 vue.js 中,获取某个DOM Element常用的方法是将这个元素改成一个 组件 (component),然后通过 this.$el 去获取,但是在一些很小
  • 网页元素坐标表示及坐标计算方法

    千次阅读 2018-04-29 10:37:49
    一、页面元素坐标种类 根据DOM的鼠标事件(参见https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent...该坐标属于绝对坐标,不随着页面滚动而变化,当网页渲染完毕后,每个元素的page坐标就已固定。2、(c...
  • 每次写一堆xpath语法,然后运行爬虫时由于xpath语法错误、或者逻辑错误亦或者节点不精准多做很多工作,于是想查查看有没有简易的xpath节点测试工具或方法:网上有xpath在线测试小工具,但这种在线测试网页在测试网页...
  • 我想获取元素位于跨域iframe中,使用谷歌浏览器的开发者工具的控制台执行语句 已知的是id本身没问题,检查页面后,元素也存在 但是执行语句返回null 然后有意思的事情来了,如果我在开发者工具的Elements标签中...
  • 如何从点击的DOM元素获取css selector

    千次阅读 2019-03-18 17:05:52
    大家平时很熟悉通过css selector获取dom对象,如果反过来,如何获取元素对象的selector呢? 第一步,先看看谷歌浏览器的Command Line API: 通过debug工具,可以coyp的值: Command Line API 包含一个用于执行...
  • C#获取动态网页中的数据

    千次阅读 2019-10-10 14:34:44
    C#获取动态网页中的数据 在实际工作需求中,编辑的文档需要获取历史地震的信息,所以利用计算机语言获取是一个简化人工操作的必要过程,本文分享一下自己第一次获取交互信息的爬虫经历! 操作流程 我要获取的信息如...
  • jquery获取父窗口的元素

    千次阅读 2016-10-19 09:52:38
    $("#父窗口元素ID",window.parent.document).find("#man_id").val(); 对应javascript版本为window.parent.document.getElementByIdx_x("父窗口元素ID").value; $(window.parent.frames["mainFrame"].document)....
  • 在学习和使用AndroidADT的时候,元素定位都会使用tools包下面自带工具uiautomatorviewer,但很多时候元素并没有text和id,只有class。但是,大家都知道class很多时候不是唯一属性,要通过class_Name()的方式来定位,...
  • ExtJS:获取Ext元素

    千次阅读 2017-07-07 13:53:09
    ExtJS:获取Ext元素 操作系统:WIN7 ExtJS版本:ExtJS3.0 浏览器:Google Chrome57.0.2987.98 新建一个文本文件,将扩展名修改为.html,我的文件名为ExtJSTest.html。在文件中编写相关html代码,如: ...
  • 网页数据抓取工具 (谷歌插件 web Scraper)

    万次阅读 多人点赞 2019-01-04 17:42:34
    Web Scraper 是一款免费的,适用于普通用户(不需要专业 IT 技术的)的爬虫工具,可以方便的通过鼠标和简单配置获取你所想要数据。例如知乎回答列表、微博热门、微博评论、电商网站商品信息、博客文章列表等等。 ...
  • chrome获取iframe元素

    千次阅读 2014-03-06 11:16:42
    <!doctype html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><...iframe src="demo.html" id="myFrame" name="...
  • 爬虫是快速获取我们需要的数据的一个有效途径,而第一步便是要请求远方服务器为我们返回对应的网页信息。我们知道,正常情况下在浏览器上我们只要输入正确的统一资源定位器url,即网页地址便可轻松打开我们想要看到...
  • 如何获取网页真实地址

    千次阅读 2013-12-21 19:39:59
    谷歌内核的浏览器有审查元素的功能,只要选中文字右键点击审查元素,可以看到这部分内容的源代码,然后找附近的源代码,比如 &lt;div id="abcd"&gt; 记录这个字符串。 打开抓包工具,建议用...
  • 一、认识DOM ...二、通过ID获取元素 语法: document.getElementById(“id”)  实例: &lt;a id="con"&gt;JavaScript&lt;/a&gt; &lt;script type="text/ja
  • 背景:随着Android 版本的更新,你会发现我们之前用的最新的版本的Appium 1.5.3无法启动我们的 Android APP 在模拟器为7.0的设备上,所以我们有必要了解如何使用 appium desktop 来获取Android APP 控件的id....
  • robotium原理之获取WebElement元素

    万次阅读 2014-06-28 17:34:53
    robotium框架支持WebView,在robotium中有getWebElements()、getWebElements(By by)等方法来获取android中的WebView的元素,并提供了 clickOnWebElement方法来完成点击事件.android中的原生控件是比较好获取的,那么...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 166,214
精华内容 66,485
关键字:

网页元素id获取工具