提示：保存成功!
提示：保存名不符合MySQL表名规范，请重试！
提示：您加载的任务版本不是最新版，可能出现兼容性问题。
工具箱
----------
提示：拖动上方按钮到流程图箭头处以添加操作，也可以点击按钮再点击箭头。

■

#### 等价XPath

以下提供除默认生成的XPath外其余等价的XPath，都能定位到同一个元素（但不完全准确，可能可以定位到除该元素外的其他元素，因此只是提供在这里作为参考）。 每行一个XPath（可使用预装的XPath Helper扩展调试）： {{XPaths}}
选项名称（鼠标移到笑脸可查看提示）☺：

使用循环内的链接

链接池（每行一个链接，有多少行链接整个任务流程就会被执行多少次）： 链接（这里只能填写一个链接，因为是手动添加的打开网页操作）
页面加载最长等待时间（秒）： 打开网页后是否向下滚动：
滚动次数（滚动类型设置为不滚动或一直滚动时请忽略此项）： 滚动后等待时间（秒）：

点此展开/折叠高级操作

加载后设置Cookies：

点击获取当前页面Cookie

元素在iframe内

使用相对循环内的XPath定位到的元素

XPath： ☺

点击后页面加载最长等待时间（秒）： 点击类型：
点击后是否向下滚动页面：
滚动次数（滚动类型设置为不滚动或一直滚动时请忽略此项）： 滚动后等待时间（秒）：

点此展开/折叠高级操作

点击该元素前针对该元素执行一段JavaScript脚本： 最长等待脚本执行时间（0代表无限等待）： 点击该元素后针对该元素执行一段JavaScript脚本： 最长等待脚本执行时间（0代表无限等待）：

提取数据前清空其他操作字段已记录的值

字段名 | 示例值 | 操作
--- | --- | ---

| {{paras.parameters[i-1]["exampleValues"][0]["value"]}} | 修改 删除 上移 下移

当前编辑字段参数名（点击字段的“修改”选项切换参数）：

{{paras.parameters[paraIndex]["name"]}}

使用相对循环内的XPATH

元素在iframe内

XPath（所有XPath内均写Field["字段名"]表示参数值）： ☺

点此展开/折叠高级操作

提取该元素数据前针对该元素执行一段JavaScript脚本： 最长等待脚本执行时间（0代表无限等待）： 提取该元素数据后针对该元素执行一段JavaScript脚本： 最长等待脚本执行时间（0代表无限等待）：
参数类型转换为（用于Excel和数据库）：
元素找不到时的值： 采集内容类型
属性名称：
JavaScript（也可以不针对该元素，直接写return JS代码即可）/系统命令/Python代码： 最长等待脚本执行时间（0代表无限等待）：
节点类型
提取图片地址后是否同时下载图片：
是否保存该字段（只想把此字段当变量而不想保存时可选否）：
参数描述：

元素在iframe内

使用循环内的文本（不勾选则每次输入的文本为下方“输入值”文本框内的文本，勾选后会使用所在“文本列表”循环内设置的文本）

索引值（0表示使用整个当前循环的文本，如果大于0则表示当前文本用~来分割开的文本索引取值，即如果当前循环的文本值为A~B，则索引值为1表示输入A，2表示输入B，0表示输入A~B）

输入值（用Field["字段名"]来输入某字段/自定义操作的最新提取/返回值，用<enter>或<ENTER>表示模拟按下回车键）：
XPath： ☺

点此展开/折叠高级操作

对该元素输入文字前针对该元素执行一段JavaScript脚本： 最长等待脚本执行时间（0代表无限等待）： 对该元素输入文字后针对该元素执行一段JavaScript脚本： 最长等待脚本执行时间（0代表无限等待）：

操作在iframe内

自定义执行模式
代码/脚本内容（用Field["字段名"]来输入某字段/自定义操作的最新提取/返回值）：

    请先阅读此说明，再在上方输入框（不是本框）写具体代码。
    此选项为高级功能，可以直接用Python代码操纵正在运行中的浏览器，及可以自定义整个执行环境中的变量，并对变量进行修改赋值等操作，示例：
    1. 用self.browser表示当前操作的浏览器，可直接用selenium的API进行操作，如self.browser.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END)即可滚动到页面最下方。
    2. 自定义一个全局变量：self.myVar = 1
    3. 操纵上面定义的全局变量：self.myVar = self.myVar + 1
    4. 打印上面定义的全局变量：print(self.myVar)

    如果想要将自己定义的变量作为字段记录，请选择下一个“在执行环境下获得Python表达式值（eval操作）”选项。

    5. 如果想要引入并使用程序本身没有带的第三方库，需要先使用如pip等工具本地安装好此库，然后在import之前添加自己安装的库的路径，如：
    （1）在系统命令行执行安装emotlib库命令：
    pip install emotlib
    （2）在代码框中写入如下代码：
    sys.path.append("D:/Python38/Lib/site-packages") # 假设此路径下有emotlib库
    import emotlib # 此时就可以使用emotlib库了
    print(emotlib.emoji()) # 使用其中的函数。

    请先阅读此说明，再在上方输入框（不是本框）写具体代码。
    此选项为高级功能，可以直接返回Python代码的表达式值，并在其他位置用Field["本操作名称"]表示此操作返回值，示例：
    1. 返回当前浏览器对象的相关值，用self.browser表示当前操作的浏览器，可直接用selenium的API进行操作，如self.browser.find_element(By.CSS_SELECTOR, "body").text即可返回当前页面的文字。
    2. 返回自定义全局变量的值：self.myVar
    3. 返回条件判断的值：self.myVar == 1
    注意此功能不能对变量进行赋值操作，即不可以写self.myVar = 1这种，如果想要进行赋值操作，请选择上一个“在执行环境下获得Python表达式值（eval操作）”选项。

是否将执行后的输出/返回值作为字段记录：

参数类型转换为：

记录前清空其他操作字段已记录的值：

最长等待脚本执行时间（0代表无限等待）：

元素在iframe内

使用循环内的索引值（不勾选则输入为下方“设定值”文本框内的内容，勾选后会使用所在“文本列表”循环内设置的下拉框索引值）

相对循环内文本索引值（0表示使用整个当前循环的文本当做索引值，如果大于0则表示当前循环的文本用~来分割开的文本索引取值，即如果当前循环的文本值为2~3，这里填写2，则表示取文本第二项，即取值3，表示设置下拉框为第3项）

XPath：

切换模式

设定值（不适用于切换到下一个选项模式）

元素在iframe内

使用相对循环内的XPath定位的元素

XPath：

在iframe内操作

循环类型：
XPath： ☺

XPath列表：
内容列表（用Field["字段名"]来输入某字段/自定义操作的最新提取/返回值）：
代码/脚本内容（用Field["字段名"]来输入某字段/自定义操作的最新提取/返回值）：

    请先阅读此说明，再在上方输入框（不是本框）写具体代码。
    根据Python代码的表达式值来决定是否循环，示例：
    1. 返回当前浏览器对象的相关值，用self.browser表示当前操作的浏览器，可直接用selenium的API进行操作，如self.browser.find_element(By.CSS_SELECTOR, "body").text=="123"，表示判断当前页面是否为123这个文本。
    2. 返回自定义全局变量的值：self.myVar，如果
    3. 返回条件判断的值：self.myVar == 1
    以上表达式返回值大于0或为真则继续循环，否则停止循环。

最长等待脚本执行时间（0代表无限等待）：
最多执行循环次数（0代表无限循环直到找不到元素或检测不到页面内容变化为止）：

（高级操作）使用代码/脚本定义循环退出条件（也可以在流程中添加自定义操作，然后选择退出循环选项）：

最长等待脚本执行时间（0代表无限等待）：
历史记录回退后等待秒数： 执行完是否向下滚动：
滚动次数（滚动类型设置为不滚动或一直滚动时请忽略此项）： 滚动后等待时间（秒）：
判断条件是从左往右判断的，即如果最左边的条件分支的判断条件满足，则执行最左边分支内的操作，否则判断从左向右第二个分支的条件是否满足，依此类推。
判断条件是从左往右判断的，即如果最左边的条件分支的判断条件满足，则执行最左边分支内的操作，否则判断从左向右第二个分支的条件是否满足，依此类推。

在iframe内操作

条件类型：
包含的文字/元素XPATH： ☺
代码/脚本内容（用Field["字段名"]来输入某字段/自定义操作的最新提取/返回值）：

    请先阅读此说明，再在上方输入框（不是本框）写具体代码。
    根据Python代码的表达式值来判断条件是否满足，示例：
    1. 返回当前浏览器对象的相关值，用self.browser表示当前操作的浏览器，可直接用selenium的API进行操作，如self.browser.find_element(By.CSS_SELECTOR, "body").text=="123"，表示判断当前页面是否为123这个文本。
    2. 返回自定义全局变量的值：self.myVar，如果
    3. 返回条件判断的值：self.myVar == 1
    以上表达式返回值大于0或为则执行此分支内操作，否则不执行。

最长等待脚本执行时间（0代表无限等待）：
代码/脚本内容（点击此处查看更多示例）： 最长等待脚本执行时间（0代表无限等待）：
操作执行前等待以下元素出现： 要等待的元素在页面第几个iframe中，0表示元素不在iframe中： 元素出现的最长等待时间（秒）： 操作执行后等待秒数（所有等待时间均可设置为小数，如0.5）： 等待类型

#### 保存任务（可按Ctrl+S调出此窗口）

任务名称： 任务描述： 导出数据格式（Excel/CSV/TXT/数据库，查看MySQL操作教程）：
导出文件名/数据库表格名称（可使用../表示相对路径以改变文件保存位置，名称中的“current_time”会被替换为执行任务时的时间戳）： 是否为Cloudflare等极端反爬网站（查看Cloudflare设计和执行教程）：
执行时通过读取以下Excel（.xlsx）文件来修改各个操作的输入参数，文件格式请在调用任务时点击“从Excel文件读取输入参数”按钮查看： 浏览器模拟类型：
每采集多少条数据保存一次（值越大采集速度越快，但如果意外退出则有数据丢失风险）： 是否要意外退出并重新执行任务时从上次保存的位置继续执行（已采集条数记录间隔为上面设置的值）：
控制台预览时数据最大显示长度： 任务执行时是否记录日志：