python selenium span内容读取_【程仁智推荐】Selenium自动化测试入门

d5e319301e443e4b121c70146f070ad9.png

LupuX 2017-06-18 14:24:28 9a6d0247b61639d5c1af06e5a09a21b3.png 11853 669f779d2daf53aa88c7ddc3d6399d05.png 收藏 41

分类专栏: Auto Test 文章标签: 自动化测试 selenium web测试 UI自动化

版权

一、什么是Selenium

Selenium 是一个浏览器自动化测试框架,它主要用于web应用程序的自动化测试,其主要特点如下:开源、免费;多平台、浏览器、多语言支持;对web页面有良好的支持;API简单灵活易于使用;支持分布式测试用例执行。 
Selenium经历了两个版本,Selenium1.0和2.0,Selenium1.0主要由以下几部分构成:

  • Selenium IDE:是一个嵌入到Firefox中的插件,可以实现浏览器的录制于回放功能。

  • Selenium Grid:自动化测试辅助工具,可以很方便地同时在多台机器上并行运行多个测试事例。

  • Selenium RC:是Selenium的核心工具,支持多种不同的语言编写的测试脚本,通过Selenium RC的服务器作为代理服务器去访问应用从而达到测试的目的。主要分为以下两部分:

    明白了Selenium1.0的家族关系,Selenium2.0可以简单的认为是将WebDriver加入到了Selenium RC这一部分中去。那么Selenium RC和WebDriver有什么区别呢?RC和 WebDriver 类似,都可以看做是一套操作web页面的规范。当然,他们的工作原理不一样。

  1. Client:用来编写测试脚本来控制Selenium server的库。

  2. Server:负责控制浏览器的行为,包含三部分:Launcher;HttpProxy;Core。

Selenium RC 在浏览器中运行 JavaScript 应用,使用浏览器内置的 JavaScript 翻译器来翻译和执行selenese 命令(Selenium 命令集合) 。

WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器。WebDriver 针对各个浏览器而开发,取代了嵌入到被测 Web 应用中的 JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript 安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver 还利用操作系统级的调用模拟用户输入。

以后我们基本都用Selenium2.0来进行学习和脚本编写,并且选定Python语言作为编写脚本的语言,其实各种语言编写脚本都大同小异。

二、Selenium环境搭建

1. 安装Python

这里暂时只说windows下的。访问Python官网:https://www.Python.org/选择下载Python2或者3系列,直接点击安装,注意勾选将其自动添加至系统环境变量中,并且勾选自动安装pip,便于我们直接从cmd中使用。具体步骤不再多说,网上教程很多。

2. 安装Selenium

安装好了Python环境之后,我们直接用pip install Selenium命令来安装Selenium。

3. 安装浏览器驱动

这里我们需要知道的是Firefox的驱动已经集成在了Selenium WebDriver包中了,不用我们自己安装了。下面看一个简单了例子:

#coding=utf-8
from Selenium import webdriver

#浏览器驱动
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")

driver.find_element_by_id("kw").send_keys("Selenium2")
driver.find_element_by_id("su").click()
driver.quit()
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

这个简单的例子做的事是:打开Firefox,访问百度首页,输入Selenium2关键字进行搜索,退出。运行它,我们可以看见以下页面:

06fd7f85bf3eb5feda4e1eae2067bc14.png

如果我们想要使用其他的浏览器呢?首先必须要下载响应浏览器的驱动,我们可以访问http://docs.Seleniumhq.org/download/来下载相关的驱动,并将其放在系统路径中。比如我们这里把Firefox改为Chrome,再运行程序可以看见:

de6bb6169fac534aa9f86127487d7356.png

4. 其他工具安装

这里我们主要使用Firefox来进行演示,还需要安装一些插件来方便我们后面的控件抓取。可以直接访问https://addons.mozilla.org/zh-CN/firefox/来搜索和安装一些插件,比如常用的XPath和Firebug等。

环境搭建完成以后我们要做的就是开始学习编写脚本的API了。

三、WebDriver API

本节的内容是,在Python语言中,如何通过Selenium WebDriver提供的各种方法来实现web自动化测试。我们会学习一下各种操作web页面的API。这里推荐一个特别好的写示例Demo用的网站http://sahitest.com/demo/index.htm,它里面基本可以找到我们需要的所有场景。

1. 定位元素

通过firebug等工具我们可以看见页面上的各种元素,如下图:

dc2ef4e796609f938eb2fde1d5c5fdc6.png

每个元素都有不同的标签名和属性名等,Selenium可以通过这些来定位元素。在WebDriver中有以下定位元素的方法:

  • id

  • name

  • class name

  • tag name

  • link text

  • partial link text

  • XPath

  • css selector

    对应的在Python中定位的方法如下: 
    find_element _by_id() 
    find_element _by_name() 
    … 
    等等八种方式(仅仅更换了关键字)。

上面这些定位方式除了最后两种外,我们只需要看它的名字就很明显可以知道,它到底是怎么定位的。但是有个问题是?我们怎么得到这些属性,可以看见即使通过firebug或查看源码去观察元素时,也是比较麻烦和不直观的。这里我们就要用到最后这两种强大的工具了。


XPath定位:

在前面我们说到了安装XPath工具,如果安装成功了之后,在一个网页的任意位置,单击右键可以看到以下页面:

b94eebd7c0e22b959c3fe47f69e655af.png

通过firebug可以看出来一些元素的属性等信息,如以下片段是搜索框和按钮的信息:

<span class="bg s_ipt_wr quickdelete-wrap">
<span class="soutu-btn">span>
<input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
<a id="quickdelete" class="quickdelete" href="javascript:;" title="清空" style="top: 0px; right: 0px; display: none;">a>
span>
<span class="bg s_btn_wr">
<input id="su" class="bg s_btn" value="百度一下" type="submit">
span>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

图中我们是在百度搜索的搜索框中点击了右键,选中XPaths之后,可以看到显示出了很多种定位此元素的方法,从中我们也可以得到此元素的各种信息。这时在相应的方法上单击右键或左键就可以将其复制下来。

使用绝对路径定位 很显然我们要定位一个元素的话,可以从第一层一直往下找,最终一定会找到这个元素的:

12b14d74cdc4a216acdccdbe2f21d4cd.png

可以从上图看到,如果想定位到搜索框的话,采用绝对路径定位的话,其层级有十层之多,太烦人类了!

使用元素属性定位 我们来分析一下这种格式,比如//input[@id='kw'],如果要在脚本中使用的话,应该是find_element_by_xpath("//input[@id='kw']"),这里的//表示当前页面的某个目录下,input表示定位元素的标签名,[@id=’kw’]表示这个元素的id属性值为kw。同理我们还可以用其他的属性值来定位,如name、class,元素的任意属性值都可以用,只要它可以标识唯一的一个元素。 
如果属性有重复的话,可以使用逻辑运算符来连接多个属性从而区别其他属性。比如:find_element_by_xpath("//input[@id='kw' and @name='wd']")


CSS选择器定位

css选择器可以方便的选择控件的任意属性,一般情况下比XPath速度要快,但是有一定的学习成本。可以访问http://www.w3school.com.cn/cssref/css_selectors.asp来获取css选择器的所有使用方式。部分语法如下:

66378f3a73874d6381120ee142ff2c43.png

根据以上语法,我们可以使用

driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector(".s_ipt")
driver.find_element_by_css_selector("map>area")
  • 1

  • 2

  • 3

等等方式来定位元素。可以使用如下方式得到CSS层级:

08f24761498c0903de76eab074fce21d.png

复制之后,粘贴出来可以看到如下字符串:

html body div#wrapper div#head div.head_wrapper div.s_form div.s_form_wrapper.soutu-env-nomac.soutu-env-index div#lg map area
  • 1

可以得到规律:层级之间用空格分隔,元素定位的方式会展示出来。(如,使用标签名的html、使用class的div.s_form、使用id的div#lg等等)所以我们上面可以使用map>area(父标签>子标签)来定位百度首页那张图片的位置。

关于更多CSS选择器的用法不做更多的解释了,可以查看官方文档等方式来查看使用方法!我们可以熟练的使用XPath或CSS选择器中的一种,就可以解决大部分定位的问题了。

2. 控制浏览器

控制浏览器窗口大小:

driver=webdriver.Firefox()
#设置窗口大小为x,y
driver.set_window_size(x,y)
#最大化窗口
driver.maxmize_window()
  • 1

  • 2

  • 3

  • 4

  • 5

控制浏览器前进后退: 
类似于点击前进后退按钮,实现页面切换。要注意的是,我们打开的页面是不是新建了一个标签页,是不是有上级页面可以返回。

driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_css_selector("div#u1>a.mnav").click()
driver.back()
driver.forward()
  • 1

  • 2

  • 3

  • 4

  • 5

3. 元素操作

当我们获取了元素之后,还要对其进行操作,如点击按钮、输入文字、提交表单等。大多数页面交互的方法通过WebElement接口提供,常用的有:

clear() 清除文本框中的文本 send_keys(*value) 模拟按键输入 click() 单击元素

这几个方法很简单,很方便使用。

submit() 用于提交表单,例如搜索框中的提交按钮。比如我们可以用如下代码直接输入搜索的关键字后用submit()提交,而不用获取搜索按钮再点击。

driver.find_element_by_css_selector("#kw").send_keys("selenium2").submit()
  • 1

还有几个常用的方法:

size() 获取元素的大小尺寸 text()获取元素的文本 is_displayed()元素是否可见

4. 鼠标、键盘事件

模拟鼠标右键、双击、悬停、拖拽等操作,会用到ActionChains类。selenium.webdriver.common.action_chains.ActionChains(driver)当调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。

ActionChains方法列表:

click(on_element=None) ——单击鼠标左键click_and_hold(on_element=None) ——点击鼠标左键,不松开context_click(on_element=None) ——点击鼠标右键double_click(on_element=None) ——双击鼠标左键drag_and_drop(source, target) ——拖拽到某个元素然后松开drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开key_down(value, element=None) ——按下某个键盘上的键key_up(value, element=None) ——松开某个键move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标move_to_element(to_element) ——鼠标移动到某个元素move_to_element_with_offset(to_element, xoffset, yoffset) ——移到距某个元素(左上角)多少距离的位置perform() ——执行链中的所有动作release(on_element=None) ——在某个元素位置松开鼠标左键send_keys(*keys_to_send) ——发送某个键到当前焦点的元素send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

这些鼠标键盘事件相对来说用的并不是很多,我们只需要熟练使用最常用的那些,剩下的都差不多。

5. 获取验证信息

我们在编写功能测试用例时,一般会有预期结果,在自动化用例执行完成之后,我们可以从页面上获取一些信息来验证用例是执行失败还是成功。最常用的几种如下:

driver.title -获取当前页的title
driver.current_url -获取当前页面URL
driver.find_element_by_...(...).text -获取当前控件的text信息
  • 1

  • 2

  • 3

6.设置等待时间

显示等待: - 主要使用的类和方法:WebDriverWait、uitil\until_not、Expected Conditions。 
请看以下简单示例:

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Firefox()
driver.get("http://www.qq.com/")

element=WebDriverWait(driver,5,0.5).until(EC.title_is(U"腾讯首页"))

print(element)
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

这里调用WebDriverWait来实现,在默认的一段时间内,每隔一段时间检测一次当前的页面指定元素是存在。

fb9c140918ddb7698db868b437929b0c.png

WebDriverWait()

如图所示,WebDriverWait有四个参数,WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None),分别是:driver;超时时间,检测间隔;超时后的异常信息。

until()和until_not()

WebDriverWait()一般和until()或until_not()配合使用,until(method,message=’ ‘) 调用该方法提供的驱动程序作为一个参数,直到返回值为true,同理可知道until_not(method,message=’ ‘),调用该方法提供的驱动程序作为一个参数,直到返回值应该为false。

其中的参数method,应该使用什么方法呢?这里就要用到另一个常用的类了:

expected_conditions

注意,在上面的code中我们用as将其重命名为了EC,这个类有很多种方法可以选用:

9e493e8507590c8619c664d6d8dadeed.png

8b551bee604fedb0cdac07093092aea9.png

可以看到里面有很多的方法可以用来判断是否存在相应的元素。当然这里的method我们也可以用其他的方法,比如:WebDriverWait(driver,5,0.5).until(lambda driver: driver.find_element_by_xpath("//a[@bosszone='news_n']")),用这样的方式来判断是否显示出了响应的元素。

隐式等待: - implicitly_wait

隐式等待相对于显式等待就要简单多了,driver.implicitly_wait(n),n代表等待的秒数, 隐式等待相当于设置全局的等待,在定位元素时,对所有元素设置超时时间,超出了设置时间则抛出异常,默认是0。如果元素定位不到,则以轮询的方式不断定位,直到超时时间到达。

强制等待-sleep休眠方法: - Python的time模块提供,sleep(n),n为秒数。程序执行到这里的时候,强制暂停所设置的时长。

7. 定位一组元素

在前面我们说到了8种定位方法,是对单元素定位的。WebDriver还提供了与之对应的8种定位方法用于定位一组元素。区别在于element后面加了一个s,如下:

find_elements_by_id()
find_elements_by_name()
...
  • 1

  • 2

  • 3

一般用于以下场景:

  • 批量操作对象:如将所有的复选框选中\取消选中

  • 先获取一组对象,然后在这组对象中过滤出具体定位的对象

8. 多表单、多窗口切换

多表单页面:如图所示我们如果直接操作,去点击Link Test(frame中的元素),是不可以的,因为我们首先需要切换到这个frame里面才可以进行操作。

c9fda3afc7909a49f33712b57813565c.png

通过firebug工具可以得到此页面的源码,便于我们定位元素:

f4bac9d1ef5a1af5ca359d83f00262e6.png

switch_to_frame(参数)方法,参数可以是iframe的id、name,如果没有的话,也可以传入locator;switch_to_default_content()方法,用来返回上一层表单,默认与据它最近的switch_to_frame方法对应。

#coding=utf-8
from selenium import webdriver

driver=webdriver.Firefox()
driver.get("http://sahitest.com/demo/iframesTest.htm")
#切换到frame里面去
driver.switch_to_frame(driver.find_element_by_xpath("/html/body/iframe"))
#进行操作
driver.find_element_by_link_text("Link Test").click()
#退出至上一层表单
driver.switch_to_default_content()
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

多窗口切换:如果我们打开了多个窗口,然后想切换到其中的一个窗口呢?那就要用到switch_to_window这个方法了,请看如下代码片段:

driver=webdriver.Firefox()
driver.get("http://www.qq.com/")

#获取qq首页窗口句柄
first_windows=driver.current_window_handle

driver.find_element_by_xpath("//a[@bosszone='news_n']").click()

#当前所有打开的窗口句柄
all_handles=driver.window_handles

#进入到首页窗口
for handle in all_handles:
if handle==first_windows:
driver.switch_to_window(handle)
print("In first_windows")

#从首页打开"图片"页
driver.find_element_by_xpath("//a[@bosszone='photo_n']").click()
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

9. 警告框处理

在WebDriver中处理js生成的alert、confirm、prompt是很简单的,即用switch_to_alert()方法定位到弹出框,再使用text/accept/dismiss/send_keys进行操作。看如下代码片段:

# coding=utf-8
from selenium import webdriver
import time

driver=webdriver.Firefox()
driver.get("https://www.baidu.com/")

#点击设置
driver.find_element_by_css_selector("div#u1 a.pf").click()
#点击编辑设置
driver.find_element_by_class_name("setpref").click()
time.sleep(1)
#保存设置
driver.find_element_by_css_selector("div#gxszButton>a.prefpanelgo").click()
time.sleep(1)
#接收弹窗
driver.switch_to_alert().accept()
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

10. 操作滚动条&截图

操作滚动条:

可以使用js脚本,拖动到指定地方,用 driver.execute_script("arguments[0].scrollIntoView();", target),这个方法来拖动滚动条到指定的地方。其实元素没在一屏,也可以直接定位并点击的。

# coding=utf-8
from selenium import webdriver

driver=webdriver.Firefox()
driver.get("http://www.qq.com/")

#定位到“体育社区”
target = driver.find_element_by_xpath("//a[@href='http://sports.qq.com/fans/']")
#滚动到“体育社区”
driver.execute_script("arguments[0].scrollIntoView();", target)
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

截图:

截图操作也很简单,使用driver.get_screenshot_as_file(path)即可完成截图,之后 可以借助PIL模块来进行各种处理。

11. 其他操作

还有其他一些操作如:上传下载文件、操作cookie、验证码的处理等等操作还没有用到过,这些用的场景较少并且有的还比较复杂,用到的时候再去学习就好了。 
熟练使用以上的各部分,可以写出各种常用的脚本,我们算是入门Selenium了。:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 操作mysql_C++操作mysql方法总结(1)

C通过mysql的c api和通过mysql的Connector C 1.1.3操作mysql的两种方式使用vs2013和64位的msql 5.6.16进行操作项目中使用的数据库名为booktik表为book……….(共有30条记录&#xff0c;只列出了部分记录&#xff0c;14-30未列出)一、通过mysql的C api进行操作1、新建一个空项目…

mysql进阶知识_Mysql面试知识点总结(进阶篇)

上一篇主要介绍一些基础的mysql知识点&#xff0c;这一篇我们介绍一下mysql比较重要但在开发中我们程序员很少知道的几个大点(自以为是的观点)。数据库设计三范式&#xff1a;第一范式&#xff1a;数据库表的每一列都是不可分割的原子数据项&#xff0c;即列不可拆分。第二范式…

java实现报表_修改带 JAVA 自定义类的报表还要重启应用,咋解决?

这是 JAVA 编译型语言特性决定的&#xff0c;修改 JAVA 程序重启应用也正常。只不过改报表就要重启整个应用就有点夸张了&#xff0c;报表变动比较频繁&#xff0c;每次都重启应用会影响业务的。这个问题的根本原因是耦合性问题&#xff0c;报表里一旦涉及到 JAVA 代码就要跟主…

idea 用iterm 终端_iTerm2 都不会用,还敢自称老司机?(上)

对于需要长期与终端打交道的工程师来说&#xff0c;拥有一款称手的终端管理器是很有必要的&#xff0c;对于 Windows 用户来说&#xff0c;最好的选择是 Xshell&#xff0c;这个大家都没有异议。但对于 MacOS 用户来说&#xff0c;仍然毋庸置疑&#xff0c;iTerm2 就是你要的利…

bootstrap 日历中文_bootstrap日期选择器本地化-中文

最近用bootstrap做项目&#xff0c;所以就顺便搜了下用bootstrap写的日期选择器。搜到的第一和第二条结果虽然是官网&#xff0c;但上面挂的还是基于bootstrap2的日期选择器(此时为北京时间2017-12-26 17:18)&#xff0c;不能与bootstrap3兼容使用。所以又去找bootstrap3的日期…

td之间的间距怎么改_论文的一级标题、二级标题格式怎么弄?

其实论文写好了以后&#xff0c;论文格式的调整也是非常重要的&#xff0c;具体的格式一般有以下几点&#xff1a;标题格式&#xff0c;一级标题、二级标题、三级标题页码格式&#xff0c;一般是正文之前为罗马数字&#xff0c;正文以后为阿拉伯数字&#xff0c;一般是页脚中间…

winform教_电脑绝技教你22天学精Csharp之第十五天winform应用程序补充5

{{1}}$using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO;namespace _10打开对话框{publi…

plupload怎么设置属性_腾达无线路由器怎么设置,这些是你要知道的

腾达无线路由器怎么设置1、联好线路&#xff1a;到你家的外网网线接路由器的WAN口&#xff0c;你的电脑连到路由器的LAN口(有四个&#xff0c;任意一个均可)&#xff0c;给路由器接通电源。设置的时候&#xff0c;给路由器通电&#xff0c;一根网线直接连电脑和路由器的这个口就…

mysql centos 安装目录在哪_centos中如何查看mysql安装目录在哪

centos中查看mysql安装目录的方法&#xff1a;推荐教程&#xff1a;centos使用教程1、使用ps -ef|grep mysql命令查看&#xff1a;结果&#xff1a;root 17659 1 0 2011 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir/var/lib/mysql --socket/var/lib/mysql/mysql.sock …

dynamic 365 js 失去焦点_基于Auto.js的QQ好友动态秒赞系统

0.脑筋急转弯请问在什么情况下log(10) 10log(20) 20左滑查看答案 console.log(10) 是 10 console.log(20) 是 201.工具选…

scrapy框架_Python:Scrapy框架

“ Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架&#xff0c;它可以应用在广泛领域&#xff1a;Scrapy 常应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫&#xff0c;抓取指定网站…

python求两数之和的命令_数学建模:科学计算Python2小时-Python基础

这一部分主要面向数模活动中的python基础知识进行讨论作者系列文章(科学计算Python2小时)目录&#xff1a;李似&#xff1a;科学计算Python2小时-前言与目录​zhuanlan.zhihu.com首先要说明的是&#xff0c;目前常用的Python版本包括Python2和Python3&#xff0c;二者有一些语法…

空白世界地图打印版_洪恩识字卡1300字十字帖+绘本,可打印成册

洪恩识字卡电子版资源&#xff0c;共1300字&#xff0c;无拼音和升级版带拼音都有&#xff0c;可直接打印&#xff0c;可分享免费送我在app中无意洪恩识字这个宝藏app&#xff0c;识字是想着孩子能早日实现自由阅读&#xff0c;可是一直对着电子设备伤眼晴&#xff0c;于是找了…

操作系统实验读者写者程序源码_SAST Weekly | STM32F103系列开发板移植华为LiteOS操作系统...

SAST weekly 是由电子工程系学生科协推出的科技系列推送&#xff0c;内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面&#xff0c;帮助同学们增长姿势&#xff0c;开拓眼界&#xff0c;每周更新&#xff0c;欢迎关注&#xff01;欢迎愿意分享知识的同…

java 远程调试spark_spark开启远程调试

一.集群环境配置#调试Master&#xff0c;在master节点的spark-env.sh中添加SPARK_MASTER_OPTS变量export SPARK_MASTER_OPTS"-Xdebug -Xrunjdwp:transportdt_socket,servery,suspendy,address10000"#调试Worker&#xff0c;在worker节点的spark-env.sh中添加SPARK_WO…

web中间件_常见web中间件拿shell

1.weblogic后台页面&#xff1a;(http为7001&#xff0c;https为7002)Google关键字&#xff1a;WebLogic Server AdministrationConsole inurl:console默认的用户名密码1、用户名密码均为&#xff1a;weblogic2、用户名密码均为&#xff1a;system3、用户名密码均为&#xff1a…

java定义抽象类abarea_详解 抽象类

本人在这篇博文中要讲解的知识点&#xff0c;和本人之前的一篇博文有所关联。因为&#xff0c;“抽象类” 是按照 “自下而上” 的顺序来编写所需的类&#xff0c;而在本人之前的博文《详解 继承(上)—— 工具的抽象与分层》中讲到的 继承 则与之相反&#xff0c;按照 “自上而…

word表格图片自动适应表格大小_Excel应用实践20:使用Excel中的数据自动填写Word表格...

学习Excel技术&#xff0c;关注微信公众号&#xff1a;excelperfect我在Excel工作表中存放着数据&#xff0c;如下图1所示。图1我想将这些数据逐行自动输入到Word文档的表格中并分别自动保存&#xff0c;Word文档表格如下图2所示&#xff0c;文档名为“datafromexcel.docx”。图…

dnspod java_使用dnspod遭遇的奇特问题以及背后的原因与临时解决方法

由于园子里有不少用户在使用dnspod&#xff0c;我们觉得有必要将这两天blogjava.net域名在dsnpod遇到的奇特问题分享一下&#xff0c;以免再有人踩着这个坑。12月11日&#xff0c;我们登录到dnspod的后台时&#xff0c;大吃一惊&#xff0c;blogjava.net这个域名竟然消失了。联…

cad转dxf格式文件太大_想知道DWG、DWT、DWS和DXF是什么吗?从了解4种CAD图形格式开始吧...

原创&#xff1a;就说我在开发区常用图形文件格式盘点CAD中的图形文件格式共9种&#xff0c;其扩展名分别为&#xff1a;❶DWG – 图形或块文件❷DWT – 图形样板文件❸DWS – 图形标准文件❹DXF – 图形交换文件(ASCII 或二进制)❺DST – 图形集或图纸集文件(SHEETSET 命令)❻…