精华内容
下载资源
问答
  • auto_form 表单(例如Google表单)的自动填充源代码。 依存关系 节点(酿造安装节点) puppeteer( npm install puppeteer ) 设置 npm install 执行 node main.js 输出 screenshot.jpg
  • 表单自动填写,XP下开发,还不完整.希望有用的下载...
  • 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
  • 一个简单的chrome扩展程序自动填充表格源代码,这将帮助您入门并成为chrome扩展程序的主人 学习编写自己的简单chrome扩展在本文中,您将学习创建一个简单的chrome扩展(需要HTML和Javascript的基本知识)有多么...
  • 表单自动填写,网页自动提交工具

    千次下载 热门讨论 2012-11-06 10:02:04
    模拟人工提交网页表单操作,同时监控提交结果变化并报警...7、实现网页整体监控、HTML元素监控、源代码监控。 8、多种报警处理方式:声音报警、弹窗报警、触发新任务或第三方程序 9、支持定时任务,程序可后台隐藏执行
  • Firefox自动填充 自动填充是Mozilla Firefox的一个小巧但功能强大的插件,其目的是:在页面加载...表单字段向导–使用该向导可以自动为您生成自动填充规则,而无需查看源代码 易于管理–创建配置文件以更好地组织自动
  • 第一步: 在页面查看源代码,把Form中包含的需要填列的HTML控件找出来如: <form name=”mainfrm” action=”” method=”post”> <input type=”text” name=”username”/> <input type=”submit...
  • 用记录集填充表格函数-精品源代码 用记录集填充表格函数-精品源代码
  • Chrome 插件会根据您的 REST 端点提供的 JSON 提要自动填充 dhlmultishipping ( ) 上的客户表单。 安装 下载并解压完整的源代码 在 Chrome 中访问 c​​hrome://extensions 确保选中右上角的开发人员模式复选框 ...
  • 记录集填充msflexgrid表格[记录集填充msflexgrid表格]-精品源代码
  • python操作excel(二):自动填充

    千次阅读 2019-04-28 16:48:06
    Excel中有个非常好用且常用的功能就是自动填充,想必常用excel的小伙伴都了解,那么python能否实现这个功能呢?答案是肯定的,pandas模块可以很好的完成这项工作,而且更加灵活。一起来看下如何用代码实现吧。 首先...

    Excel中有个非常好用且常用的功能就是自动填充,想必常用excel的小伙伴都了解,那么python能否实现这个功能呢?答案是肯定的,pandas模块可以很好的完成这项工作,而且更加灵活。一起来看下如何用代码实现吧。

    首先,我们需要一个测试文件,路径位于本人的电脑桌面,名为“填充.xlsx”,如下截图,长的就像箭头左边那样;现在我要把它做一个自动填充,填充结果成箭头右边那样。
    在这里插入图片描述
    我们的要求是:

    • “编号”,使用数字填充
    • “状态”,使用“yes”,“no”交替填充
    • “日期1”,以天的维度依次递增
    • “日期2”,以月份的维度依次递增
    • “日期3”,以年的维度依次递增

    该如何实现呢?我们先理一下解决思路,这个问题我们大概要分两步走:
    第一步:读取数据
    第二步:分别填充编号,状态,日期1,2,3
    我们分别看下代码实现:

    读取数据
    上一篇文章已经介绍了pandas读取文件的方法,就是使用read_excel()了,我们用jupyter notebook看下于运行结果:
    在这里插入图片描述
    读取的数据并不是向我们想象中的区域,我们的源数据并不是顶格写的,这种情况pandas会把空行和空列自动读取,我们想要只保留数据区域,read_excel()中的“skiprows”参数用于跳过空行,“usecols”参数用来指定选取列区域,这样就可以跳过空行和列,选取我们想要的数据区域啦!附上代码:

    import pandas as pd
    df=pd.read_excel(r'C:\Users\XZC43\Desktop\填充.xlsx',skiprows=4,usecols="C:H",index_col=None)
    print(df)
    

    运行结果如下:
    在这里插入图片描述
    成功读取到我们想要的数据区域,记得用index_col参数把第一行作为column索引。

    填充字段

    • 填充“编号”字段
      构造for循环遍历添加数值:
    for i in df.index:
    	df['编号'].at[i]=i+1
    print(df)
    

    运行结果如下:
    在这里插入图片描述
    成功填充编号字段,但是细心的小伙伴发现了,填充值的类型是float类型的,我们想要的是int类型的,read_excel()中的dtype字段可以设置字段类型,如果直接设置编号字段为int类型,会报错,因为在填充语句运行时,编号字段是存在空值的,空值是无法转换成int整型的,所以,我们要设置dtype参数为str类型。剩下需要填充的字段同理,需要修改读取文件的代码如下:

    df=pd.read_excel(r'C:\Users\XZC43\Desktop\填充.xlsx',skiprows=4,usecols="C:H",index_col=None,dtype={'编号':str,'状态':str,'日期1':str,'日期2':str,'日期3':str,})
    
    • 填充“状态”字段
      在上述for循环的基础上,利用if判断语句实现:
    for i in df.index:
    	df['状态'].at[i]='yes' if i%2==0 else 'no'
    print(df)
    

    运行结果如下:
    在这里插入图片描述
    成功填充状态字段。

    • 填充“日期1”字段
      需要导入datetime模块,设置一个开始日期,利用for循环遍历添加日期:
    from datetime import date,timedelta
    
    start=date(2019,4,1)  #设置起始日期为“2019-04-01”
    for i in df.index:
    	df['日期1'].at[i]=start+timedelta(days=i)
    print(df)
    

    运行结果如下:
    在这里插入图片描述
    成功填充日期1字段。

    • 填充“日期2”字段
      可惜的是,timedelta函数只有day参数,没有month或year参数,所以我们需要单独计算年和月,其中年份的计算比较方便,所以先讲“日期3”字段的填充,直接for循环遍历,使用date()函数定义新的年,月,日即可:
    for i in df.index:
    	df['日期3'].at[i]=date(start.year+1,start.month,start.day)
    print(df)
    

    运行结果如下:
    在这里插入图片描述
    成功填充“日期3字段”。

    • 填充“日期2“字段
      该字段之所以最后说,因为月份的填充以上两种方法都不可用,月份只有12个月,牵扯到超过12个月需要递进一年的逻辑,单纯的加数字是无法做到的,这里需要构造一个添加月份的函数,我直接贴上代码,大家可以理解下它的逻辑:
    def addmonth(d,md):
    	'''d(日期),md(月份差),yd(年份差),m(月份)'''
    	yd=md//12
    	m=d.month + md%12
    	if m!=12:
    		yd += m//12
    		m=m%12
    	return date(d.year+yd, m, d.day)
    
    for i in df.index:
    	df['日期2'].at[i]=addmonth(start,i)
    
    print(df)
    

    运行结果如下:
    在这里插入图片描述
    成功填充日期2字段。

    好啦!五个字段均按照我们的要求成功填充,最后我们保存下文件,还是放在桌面,名为“填充结果.xlsx”即可。最后整理一下代码如下:

    import pandas as pd
    from datetime import date,timedelta
    
    def addmonth(d,md):
        '''d(日期),md(月份差),yd(年份差),m(月份)'''
        yd=md//12
        m=d.month+md%12
        if m!=12:
            yd += m//12
            m=m%12
        return date(d.year+yd,m,d.day)
    
    df=pd.read_excel(r'C:\Users\XZC43\Desktop\填充.xlsx',skiprows=4,usecols="C:H",index_col=None,dtype={'编号':str,'状态':str,'日期1':str,'日期2':str,'日期3':str})
    
    start=date(2019,4,1)
    for i in df.index:
        df['编号'].at[i]=i+1
        df['状态'].at[i]='yes'if i%2==0 else 'no'
        df['日期1'].at[i]=start+timedelta(days=i)
        df['日期3'].at[i]=date(start.year+i,start.month,start.day)
        df['日期2'].at[i]=addmonth(start,i)
    
    df.set_index('编号')
    df.to_excel(r'C:\Users\XZC43\Desktop\填充结果.xlsx')
    print('完成!')
    

    结束。

    展开全文
  • android自动填充服务 介绍 (Introduction) Filling out forms is a time-consuming and tedious job. Most people get frustrated with long forms or forgotten passwords. To fill the gap between forums and ...

    android自动填充服务

    介绍 (Introduction)

    Filling out forms is a time-consuming and tedious job. Most people get frustrated with long forms or forgotten passwords. To fill the gap between forums and user data, the Android team introduced the autofill framework, which is available in Android 8.0 (API level 26) and higher.

    填写表格是一项耗时且乏味的工作。 大多数人对长格式或忘记密码感到沮丧。 为了填补论坛和用户数据之间的空白,Android团队引入了自动填充框架,该框架可在Android 8.0(API级别26)及更高版本中使用。

    While using apps on your phone, you might’ve seen the login details filling up automatically by password-manager apps. The apps that fill other apps' views are called autofill services.

    在手机上使用应用程序时,您可能会看到密码管理器应用程序自动填写了登录详细信息。 填充其他应用程序视图的应用程序称为自动填充服务。

    By optimizing your app for autofill, you can provide more sophisticated user behavior, which helps them avoid input errors and save time, as they don’t need to write the same inputs multiple times.

    通过优化应用程序的自动填充功能,您可以提供更复杂的用户行为,从而帮助他们避免输入错误并节省时间,因为他们不需要多次编写相同的输入。

    组件 (Components)

    When we see the autofill framework from the top level, we have mainly three components: the source of the data, the destination, and the mediator.

    当我们从顶层看到自动填充框架时,主要有三个组件:数据源,目的地和中介器。

    • Autofill services: Apps such as password managers act as sources of data that stores the data that can be used across the apps

      自动填充服务:密码管理器之类的应用程序充当数据源,用于存储可在各个应用程序中使用的数据

    • Autofill clients: These are the destination apps in which the data is to be filled

      自动填充客户端:这些是要在其中填充数据的目标应用程序

    • Android system: This is the mediator that helps the above two components work together

      Android系统:这是帮助上述两个组件协同工作的中介程序

    自动填充提示 (Autofill Hints)

    为什么我们需要实现自动填充提示? (Why do we need to implement autofill hints?)

    As I said, the source of data is an autofill service — they try to determine the view using heuristics. So if they change the behavior, autofill also changes. To make sure the autofill service works correctly with the view, we need to provide autofill hints.

    正如我所说的,数据源是自动填充服务-他们尝试使用启发式方法确定视图。 因此,如果他们改变了行为,自动填充也会改变。 为了确保自动填充服务在视图中正常工作,我们需要提供自动填充提示。

    如何实现自动填充提示 (How to implement autofill hints)

    We can either implement them in the XML layout or in the Kotlin class file.

    我们可以在XML布局或Kotlin类文件中实现它们。

    First, let’s see how to implement a simple hint in the XML using the attribute android:autofillHints . The following code shows how to implement a password hint in the XML. Have a look:

    首先,让我们看看如何使用android:autofillHints属性在XML中实现简单提示。 以下代码显示了如何在XML中实现密码提示。 看一看:

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autofillHints="password" />

    Now, we can implement the same in the Kotlin class file by using setAutofillHints on the view. Have a look:

    现在,我们可以通过在视图上使用setAutofillHints在Kotlin类文件中实现相同的功能。 看一看:

    edtPassword.setAutofillHints(View.AUTOFILL_HINT_PASSWORD)

    The autofill framework won’t validate the hint constants. The following are some of the predefined hint constants:

    自动填充框架不会验证提示常量。 以下是一些预定义的提示常量:

    自动填充的重要性级别 (Importance Level for Autofill)

    We can tell the system whether the views in the hierarchy require autofill or not by using theandroid:importantForAutofill attribute. By default, it uses IMPORTANT_FOR_AUTOFILL_AUTO. Have a look:

    我们可以使用android:importantForAutofill属性来告诉系统层次结构中的视图是否需要自动填充 默认情况下,它使用IMPORTANT_FOR_AUTOFILL_AUTO 。 看一看:

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:importantForAutofill="no" />

    We can also set the importance level in Kotlin classes by using the setImportantForAutofill function. Have a look:

    我们还可以使用setImportantForAutofill函数在Kotlin类中设置重要性级别。 看一看:

    tvSample.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);

    By default, it accepts five different values, such as:

    默认情况下,它接受五个不同的值,例如:

    • auto: This the default value, which lets the Android system use its heuristics to determine if the view is vital for autofill

      auto :这是默认值,可让Android系统使用其启发式方法来确定视图是否对自动填充至关重要

    • no: This value represents that this view isn’t important for autofill

      no :此值表示此视图对于自动填充并不重要

    • autofill

      自动填充
    • yes: This value represents that this view is vital for autofill

      yes :此值表示此视图对于自动填充至关重要

    • yesExcludeDescendants: This view is important for autofill, but its children aren’t important for autofill

      yesExcludeDescendants :此视图对于自动填充很重要,但其子级对于自动填充并不重要

    强制执行自动填充请求 (Force the Autofill Request)

    There will be times when you need to force the autofill request in response to a user’s actions. In this case, we can use the autofill menu item, which appears on the long press. The following code example shows how to force an autofill request:

    有时,您需要强制执行自动填充请求以响应用户的操作。 在这种情况下,我们可以使用长按时出现的自动填充菜单项。 以下代码示例显示了如何强制执行自动填充请求:

    fun HandlingEvent(view: v) {
        val am = requireContext().getSystemService(AutofillManager::class.java)
        am?.requestAutofill(v)
    }

    We can also cancel the autofill context using thecancel() function. This can be handy if the user clears the text.

    我们还可以使用cancel()函数取消自动填充上下文。 如果用户清除文本,这将很方便。

    奖金 (Bonus)

    To learn more about Android advanced development, read the following articles:

    要了解有关Android高级开发的更多信息,请阅读以下文章:

    That is all for now — hope you learned something useful. Thanks for reading.

    目前仅此而已-希望您学到了有用的东西。 谢谢阅读。

    翻译自: https://medium.com/better-programming/exploring-the-autofill-framework-in-android-672221ccdc6a

    android自动填充服务

    展开全文
  • 界面是仿extjs的,虽然说已经审美疲劳了,但是也找不出更好的界面设计了。 主要功能 1.无限制的行和列(增加删除) 2.单元格选定多个 3.单元格不同格式(字体,字号等) 4.统计函数 5.undo/redo
  • 使用selenium库实现自动抓取网页元素,并定位填写表单数据,可实现自动填写,省去大量人力。为方便使用selenium库以及方便处理运行中的错误,本文将selenium库进行一定的再封装,使读者了解selenium库后,就可快速...

    摘要

    最近更新时间:2020.08.20 (待更新实验部分)
    本文类型:实践应用类(非知识讲解)
    本文介绍selenium库和chrome浏览器实现自动抓取网页元素,并定位填写表单数据,可实现自动填写,省去大量人力。为方便使用selenium库以及方便处理运行中的错误,本文将selenium库进行一定的再封装,使读者了解selenium库后,就可快速上手编程。
    一、本文知识点:1.安装selenium库,2.selenium库寻找元素的方式,3.selenium库的再封装
    二、本文结构:1.先简略介绍知识点,2.按完整段的方式贴出复制后可直接运行的调试代码,方便读者调试贴出的每段代码
    三、本文方法实现方式:以百度首页作为操控网页,以谷歌浏览器为实验平台,使用python+selenium进行网页操作。ps:会更新其他相应的抓取网页实验。
    四、本文实验:1.后台抓取A股大盘数据(2020.09.09已更新),2.后台QQ邮箱读取最新邮件(待更新),等其他待更新实验(均提供详细代码及注释,本文末尾有对应链接)

    提示:以下是本篇文章正文内容,下面案例可供参考


    一、安装selenium库及相关文件

    Selenium库是python用于爬虫网站的自动化工具,支持的浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持多种操作系统如Windows、Linux、IOS、Android等。

    1.安装selenium库

    (1)点击win10的开始菜单,直接输入cmd后右键管理员方式运行
    (2)若安装python时勾选了添加路径的选项,即可直接输入命令
    pip install selenium
    (若没有添加,建议卸载python后,重新安装并勾选添加路径。慎重选择该建议,因为需要重新安装之前的下载的库)
    (3)在网络连通下等待完成,若提示timeout,则可尝试下面命令切换下载源,重新安装:pip install selenium -i https://pypi.douban.com/simple

    2.下载谷歌浏览器相关文件

    本文使用的浏览器为谷歌浏览器,因此只介绍谷歌浏览器的爬虫方法,其他浏览器的方法类似。

    (1)点击下载谷歌浏览器
    (2)安装谷歌浏览器后,查看谷歌浏览器的版本号。点击谷歌浏览器右上角的三个点,选择–帮助关于Google Chrome查看版本号
    如图,本文的版本号为 84.0.4147.125
    在这里插入图片描述
    (3)点击下载谷歌浏览器驱动
    打开下载驱动的页面,找到与版本号对应的驱动版本,本文的84.0.4147.125,因此如图寻找84.0开头的驱动,点击打开下载对应系统的驱动。然后将其解压到准备编写项目的文件夹。
    不要将其放置python目录或者浏览器安装目录下,如果这样做,当移植到别的电脑时,会出现各种各样的BUG,根本原因是你电脑装了相应的库文件以及驱动,但移植的电脑未必安装。

    在这里插入图片描述
    在这里插入图片描述

    二、selenium快速入门

    1.定位元素的八种方式

    (1) id
    (2) name
    (3) xpath
    (4) link text
    (5) partial link text
    (6) tag name
    (7) class name
    (8) css selector

    2. id方式

    (1) 在selenium通过id定位一个元素: find_element_by_id
    以百度的页面为例,其百度一下输入框部分网页源代码如下:

    <html>
      <head>
      <body link="#0000cc">
        <a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
        <form id="form" class="fm" name="f" action="/s">
          <span class="soutu-btn"></span>
            <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" 
            .......
            <input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn">
    

    其中,<input id="kw" class="s_ipt" name="wd" value="" maxlength="255">为输入框的网页代码,<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn>"为百度一下的网页代码
    通过id查找元素的代码及注释如下:

    import os
    import sys
    import time
    from selenium import webdriver
    ##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
    当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
    ##配置谷歌浏览器驱动路径##
    谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
    ##初始化selenium控件##
    浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
    ##打开链接,更换其他网址,请注意开头要带上http://##
    浏览器驱动.get("http://www.baidu.com")
    ##通过id搜索清除搜索框内容##
    浏览器驱动.find_element_by_id("kw").clear()
    ##通过id搜索输入搜索框内容##
    浏览器驱动.find_element_by_id("kw").send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
    ##通过id搜索点击百度一下进行搜索##
    浏览器驱动.find_element_by_id("su").click()
    ##保持5s时间
    time.sleep(5)
    ###关闭退出浏览器
    浏览器驱动.quit() 
    

    3. name方式

    仍以百度输入框为例,在selenium通过name定位一个元素: find_element_by_name
    其代码及注释如下:

    import os
    import sys
    import time
    from selenium import webdriver
    ##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
    当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
    ##配置谷歌浏览器驱动路径##
    谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
    ##初始化selenium控件##
    浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
    ##打开链接,更换其他网址,请注意开头要带上http://##
    浏览器驱动.get("http://www.baidu.com")
    ##通过name搜索清除搜索框内容##
    浏览器驱动.find_element_by_name("wd").clear()
    ##通过name搜索输入搜索框内容##
    浏览器驱动.find_element_by_name("wd").send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
    ##通过id搜索点击百度一下进行搜索##
    浏览器驱动.find_element_by_id("su").click()
    ##保持5s时间
    time.sleep(5)
    ###关闭退出浏览器
    浏览器驱动.quit()   
    

    4. xpath方式

    仍以百度输入框为例,在selenium通过xpath定位一个元素: find_element_by_xpath。不过这种方法不适合于网页中位置会变动的表格元素,因为xpath方式指向的是固定行和列,无法检测行列内容的变化。
    首先在谷歌浏览器中打开百度,在空白处右键鼠标,选择检查(N)这个选择,可以进入网页的开发者模式,如图所示。然后在百度输入框上右键鼠标,再次点击检查(N)选择,可以发现右侧代码框中自动选中的部分已经变成百度输入框的代码。最后,在右侧自动选中的代码段上右键–选择copy–选择copy Xpath,百度输入框的xpath//*[@id="kw"],百度一下的xpath//*[@id="su"]
    接下来利用这个值进行百度搜索,代码及注释如下。
    在这里插入图片描述
    在这里插入图片描述

    import os
    import sys
    import time
    from selenium import webdriver
    ##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
    当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
    ##配置谷歌浏览器驱动路径##
    谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
    ##初始化selenium控件##
    浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
    ##打开链接,更换其他网址,请注意开头要带上http://##
    浏览器驱动.get("http://www.baidu.com")
    ##通过xpath搜索清除搜索框内容,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_xpath('//*[@id="kw"]').clear()
    ##通过xpath搜索输入搜索框内容,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_xpath('//*[@id="kw"]').send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
    ##通过xpath搜索点击百度一下进行搜索,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_xpath('//*[@id="su"]').click()
    ##保持5s时间
    time.sleep(5)
    ###关闭退出浏览器
    浏览器驱动.quit() 
    

    5. link text和partial link text方式

    仍以百度首页中新闻元素为例,
    通过link text定位一个元素: find_element_by_link_text
    通过partial link text定位一个元素:find_element_by_partial_link_text
    它们两个的区别在于:link text方式为元素text属性的全称,partial link text方式为元素text属性的部分,类似模糊搜索,如果网页元素有较多相似的text属性,建议不要使用partial link text方式。
    百度首页中新闻部分的网页代码如下:

     <div id="u1">
       <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
       <a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
       <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地图</a>
       <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">视频</a>
    

    下面利用link text的方式点击进人新闻页面,代码及其注释如下所示:

    import os
    import sys
    import time
    from selenium import webdriver
    ##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
    当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
    ##配置谷歌浏览器驱动路径##
    谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
    ##初始化selenium控件##
    浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
    ##打开链接,更换其他网址,请注意开头要带上http://##
    浏览器驱动.get("http://www.baidu.com")
    ##通过link text搜索清除搜索框内容##
    浏览器驱动.find_element_by_link_text('新闻').click()
    ##通过partial link text搜索清除搜索框内容,请注意实际运行时,选择其中一个##
    ##浏览器驱动.find_element_by_partial_link_text('新').click()
    ##保持5s时间
    time.sleep(5)
    ###关闭退出浏览器
    浏览器驱动.quit() 
    

    6. tag name和class name方式

    这两种方式不推荐使用,因为在一个网页中tag nameclass name重复度太高,不容易定位,因为本文也不做深入研究。

    7. css selector方式

    仍以百度输入框为例,在selenium通过css selector定位一个元素: find_element_by_css_selector。由上文可知,<input id="kw" class="s_ipt" name="wd" value="" maxlength="255">为输入框的网页代码,<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn>"为百度一下的网页代码,那么以css selector方式进行元素搜索的代码及其注释如下:

    import os
    import sys
    import time
    from selenium import webdriver
    ##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
    当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
    ##配置谷歌浏览器驱动路径##
    谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
    ##初始化selenium控件##
    浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
    ##打开链接,更换其他网址,请注意开头要带上http://##
    浏览器驱动.get("http://www.baidu.com")
    ##通过xpath搜索清除搜索框内容,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_css_selector("input[id=\"kw\"]").clear()
    ##通过xpath搜索输入搜索框内容,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_css_selector("input[id=\"kw\"]").send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
    ##通过xpath搜索点击百度一下进行搜索,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_css_selector("input[type=\"submit\"]").click()
    ##保持5s时间
    time.sleep(5)
    ###关闭退出浏览器
    浏览器驱动.quit() 
    

    三、我的简单封装

    在网站中寻找的元素大多属于键入值或者点击类元素,为了方便使用,将selenium库进一步封装,部分代码如下(还将更新,具体使用方法在项目实践代码及注释中可见):
    (1)键入值类

    def 网站元素值更改(self,元素名称,更改数值,方法):
            元素出现 = False
            while(元素出现 == False):
                try:
                    if 方法 == "xpath":
                        self.浏览器驱动.find_element_by_xpath(元素名称).clear()
                        self.浏览器驱动.find_element_by_xpath(元素名称).send_keys(更改数值)
                    if 方法 == "name":
                        self.浏览器驱动.find_element_by_name(元素名称).clear()
                        self.浏览器驱动.find_element_by_name(元素名称).send_keys(更改数值)
                    元素出现 = True
                except:
                    元素出现 = False
                time.sleep(0.1)
    

    (2)点击类

    def Y网站元素值点击(self,元素名称,方法):
            元素出现 = False
            循环次数 = 0
            while(元素出现 == False):
                try:
                    if 方法 == "xpath":
                        self.浏览器驱动.find_element_by_xpath(元素名称).click()
                    if 方法 == "text":
                        self.浏览器驱动.find_element_by_link_text(元素名称).click()
                    元素出现 = True
                except: 
                    元素出现 = False
                循环次数 = 循环次数+1
                time.sleep(0.1)
    

    四、实验

    1.实现后台抓取A股大盘数据传送门(已完成更新)

    2.实现自动读取QQ邮箱最新邮件传送门(待更新)

    展开全文
  • 现在发现写代码不是最难的,天下代码一通抄,看你会抄不会抄。。。 反而找问题才是最难的,因为不是所有的问题你都能找到,要么就是不符合自己的问题需求, 要么就是根本是错的。。。好了,吐槽完毕! ...

    现在发现写代码不是最难的,天下代码一通抄,看你会抄不会抄。。。


    反而找问题才是最难的,因为不是所有的问题你都能找到,要么就是不符合自己的问题需求,


    要么就是根本是错的。。。好了,吐槽完毕!


    ------------------------------------------------一道华丽的波浪线-------------------------------------------------------------------


    今天花了一早上的时间学习了一下cookie的使用,就是搞不懂各个文件之间的逻辑关系,什么时候该创建cookie,在哪里创建?什么时候该调用cookie,在哪里调用?


    原理:登录表单(假设是login.jsp,没有用html文件,因为要实现数据自动填充我们就需要java代码,用一个变量保存数据,因此要么用servlet(而且servlet需要嵌套html~麻烦),要么用jsp)需要提交给servlert文件(假设是loginservlet.java),那么就应该在servlet中创建cookie保存用户信息并返回给浏览器:

    String uname = request.getParameter("username");
    		String key = request.getParameter("key");
    		
    		
    		HttpSession session = request.getSession();//此处是获取并存储sessio值,不用管
    		session.setAttribute("uname", uname);
    		session.setAttribute("key", key);
    		
    		
    		Cookie cookie = new Cookie("uname", uname);// 创建cookie
    		response.addCookie(cookie);//添加到浏览器
    		Cookie cookie2 = new Cookie("key", key);
    		response.addCookie(cookie2);


    好了,现在浏览器里面存的有cookie了,下面我们要在登录界面去调用它,判断是否已经存储的有相关信息,有的话自动填充到表单的属性值value中(login.jsp的源代码):


    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    
    String username =null;  //该变量就是下面表单中填充数据的值
    String key = null;
    Cookie[] cookies = request.getCookies(); //先从浏览器中取出cookie,没有就是空
    //String[] cookievulue = null;
     Map<String, String> cc = new HashMap<String, String>();  
    for(int i=0;i<cookies.length;i++){
    	String names = cookies[i].getName();
    	String values = cookies[i].getValue();
    	cc.put(names, values);
    }
    username = cc.get("uname");
    
    //key = session.getAttribute("key").toString();
    //session 可以直接用???
    
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'Login.jsp' starting page</title>
        
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    <link href="CSS/login.css" rel="stylesheet" type="text/css"/> <!--  调用css样式          -->
      </head>
      
      <body>
        <form action="/demo_test/Loginservlet" method="post">
    		<div id="Navigate">
    		    <div id="Gap"></div>
    			<div id="Uname">用户名:<input type="text" id="text_uname" name="username" value=<%=username%>></div>
    			<div id="Checknode">验证码:<img src="/demo_test/VlidateCode" id="image"/></div>
    			<div id="Key">口令:<input type="text" id="text_key" name="key"></div>
    			<div id="Submit"><input type="submit" value="提交"></div>
    		</div>
    
    	</form>
      </body>
    </html>
    





    展开全文
  • 在日常工作中常常需要重复填写某些表单,如果人工完成,费时费力,而且网络延迟令人十分崩溃。如果能够用程序实现自动填表,效率可以提高一倍以上,并且能够移植到多台计算机,进一步提高工作效率。webdriver是...
  • Firefom ... 于是, 自动填写功能显得十分必要. 去搜了一下自动填写的插件, 数量不少, 但真正选择起来还是有些麻烦的. 点此获得该插件!    装好插件后, 可以看到浏览器右下角状态栏里多出 Fir...
  • 首先在Excel里建立数据库,首行为标题行 在Word里,邮件-选择收件人-使用现有列表,导入数据文件 在插入合并域里选择数据列,可以预览结果,合并并完成 转载于:...
  • 曾尝试各种方法,没有效果。使用的是函数requests.get(),已写header、cookie、User-Agent,也写了rsp.encoding = rsp.apparent_encoding。 但是仍是爬取不了。奇怪的同一个网站同一个榜单,只是页数不同,前若干页...
  • Pyqt 浏览器自动填充input框小demo

    千次阅读 2016-05-16 21:57:32
    Pyqt 浏览器自动填充input框 也就是可以自动登录啦~
  • Java开发技术大全(500个源代码).

    热门讨论 2012-12-02 19:55:48
    代码范例列表 第1章 示例描述:本章演示如何开始使用JDK进行程序的开发。 HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载...
  • C#连接数据库源代码

    2013-06-22 15:16:53
    用C#与数据库连接部分源代码,其中包括插入数据、读取记录、删除数据、填充表格等十多项操作代码.
  • 4.5 控制填充风格 124 4.6 位图处理 128 4.7 输出位图 132 4.8 动画制作 133 4.9 本章小结 136 第5章 HTML 5的多媒体支持 137 5.1 使用audio和video元素 138 5.2 使用JavaScript脚本控制媒体播放 141 5.3 ...
  • C# WebBrowser实现网页自动填表

    千次阅读 2013-12-22 21:49:14
    曾今向网友介绍过我的一个自己编写的自动填写网页表单的小程序,很多网友都觉得很实用,也许多会对这个程序的源码很感兴趣,这里我只是简介下程序中用到的主要代码。最初我是通过下面这篇文章渐渐积累的相关知识,再...
  • 此时,相信大部分人都会用到浏览器自带的自动填充功能,一键填充如姓名、电话、地址等资料,能够省下不少时间。 不过,就在最近,一个芬兰的网页开发者和黑客 Viljami Kuosmanen 发现了一个重大的潜在安全漏洞,指出...
  • 在上一期python办公自动化中,我们讲解了python如何按指定名称快速创建工作表:为了拒绝做重复的事情,我用python写了个自动化脚本,让它按名称自动创建工作表 而今天我们来讲解一个比较简单的案例,使用openpyxl...
  • python+selenium自动填写提交电子表单

    千次阅读 2019-12-11 11:37:36
    前两天看到空间里面有人发 问卷星 调查,就想到能不能用 python 和 网页交互 , 自动 填写 电子表单 ,结果还真有,就尝试了一下,有些还没搞清楚,先大概介绍一下,慢慢来吧。 首先,安装 selenium ,这个很简单,...
  • python+selenium 自动填写表单并提交

    万次阅读 多人点赞 2018-03-08 16:22:30
    代码实现 方式一: 直接调用浏览器模拟人工操作(可视化操作)### # encoding=utf8 from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import time ...
  • 《JavaScript实例精通》[源代码]

    热门讨论 2012-09-21 21:09:18
    14_10.htm 禁止察看源代码。 14_11.htm 自动弹出式窗口。 14_12.htm 自动滚屏。 第15章(\15) 示例描述:JavaScript操作表格和DOM。 15_1.htm 动态添加表格。 15_2.htm 获取表格的某行。 15_3.htm ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,770
精华内容 13,508
关键字:

网页表单自动填充源代码