如何设置电火花加工程序驱动程序的Python版本

webdriver(python)学习笔记一 - milkty - 推酷
webdriver(python)学习笔记一 - milkty
最近有python开发的项目,也正打算要学习自动化与python语言。因此想通过学习python版本的webdriver来一同学习。
学习过程中参考资料有乙醇的博客:
,虫师的博客:
以及python的官方文档:
selenium&webdriver的API介绍
webdriver的是一个Web应用程序测试自动化工具,用来验证程序是否如预期的那样执行。它的目的是提供一个友好的API,比selenium&RC(1.0)API更容易使用,这将有助于使你的测试脚本更容易阅读和维护。它不依赖于任何特定的测试框架,所以它可以用于单元测试或者一个老式的“main”方法中。本节介绍webdriver的API,下面让我们来帮助你熟悉它。
如果你已经设置了项目,你就会发现,webdriver的作用跟其它库一样:它是完全独立的,你通常在使用之前不需要启动任何额外的进程,或者运行任何安装程序,如果使用Selenium-RC则要到代理服务器。&
注:需要额外的驱动来使脚本在不同环境下运行:Chrome&Driver,&Opera&Driver,&Android&Driver&andiPhone&Driver。默认是支持的Firefox Driver。
现在我们通过一个代码来了解其机制。代码实现:打开浏览器,输入谷歌网页,并在搜索框内输入“Cheese”&点击搜索,最后关闭浏览器。
from selenium import webdriver
from mon.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
# Create a new instance of the Firefox driver
driver = webdriver.Firefox()
# go to the google home page
driver.get(&&)
# find the element that's name attribute is q (the google search box)
inputElement = driver.find_element_by_name(&q&)
# type in the search
inputElement.send_keys(&Cheese!&)
# submit the form (although google automatically searches now without submitting)
inputElement.submit()
# the page is ajaxy so the title is originally this:
print driver.title
# we have to wait for the page to refresh, the last thing that seems to be updated is the title
WebDriverWait(driver, 10).until(EC.title_contains(&cheese!&))
# You should see &cheese! - Google Search&
print driver.title
driver.quit()
在下面的章节中,您将了解更多有关如何使用webdriver的东西,如如何使用浏览器的前进和后退功能(这在selenium&1.0中不能被很好的支持);以及如何使用框架和窗口测试网站。我们将会提供了更深入的讨论和范例。&
Selenium&webdriver的API命令和操作
你可能使用webdriver想要做的第一件事是导航到一个页面,通过“get”可以轻松的做到之一点
driver.get(
webdriver的运行依赖于几个因素:包括操作系统/浏览器的组合,有时可能需要等待页面加载。webdriver的在某些情况下,可能需要控制返回页面的开始与加载时间。为了确保脚本的稳定性,需要等待的元素(S)在页面中存在的&
定位UI元素(WebElements)
自动化要想模拟用户(人)的行为操作,首先需要识别并定位UI上的元素,每个元素都有特定属性,webdriver就是通过识别元素的属性来定位元素。
我们可以通过下面的一些属性或方法来定定位元素:&
这是最有效和最优选的方式来定位一个元素。常见的陷阱,开发人员可以为元素设置非唯一的ID&,或通过自动生成ID&,应该避免这种情况。
如何通过ID的方式定位一个元素,看下面这样的例子:&
&div id=&coolestWidgetEvah&&...&/div&
element = driver.find_element_by_id(&coolestWidgetEvah&)
from mon.by import By
element = driver.find_element(by=By.ID, value=&coolestWidgetEvah&)
By&class&name
“class&”是指DOM元素的属性。但在实际使用中有很多相同类名的DOM元素,在发现多个相同类名的元素时,程序会默认选择最先找到的第一个元素。
如何通过类名找到一个元素,看下面的例子:
&div class=&cheese&&
&span&Cheddar&/span&
&div class=&cheese&&
&span&Gouda&/span&
cheeses = driver.find_elements_by_class_name(&cheese&)
from mon.by import By
cheeses = driver.find_elements(By.CLASS_NAME, &cheese&)
By&tag&name&
DOM标签名称的元素。
具体方式如下面的例子:
&iframe src=&...&&&/iframe&
frame = driver.find_element_by_tag_name(&iframe&)
from mon.by import By
frame = driver.find_element(By.TAG_NAME, &iframe&)
查找并匹配元素的name属性
具体方式如下面的例子:
&input name=&cheese& type=&text&/&
cheese = driver.find_element_by_name(&cheese&)
from mon.by import By
cheese = driver.find_element(By.NAME, &cheese&)
By link text
通过链接文本找到元素匹配
例子如下:
&a href=&/search?q=cheese&&cheese&/a&&
cheese = driver.find_element_by_link_text(&cheese&)
from mon.by import By
cheese = driver.find_element(By.LINK_TEXT, &cheese&)
By Partial Link Text
通过查找部分链接文件匹配元素
例子如下:
&a href=&/search?q=cheese&&search for cheese&/a&&
cheese = driver.find_element_by_partial_link_text(&cheese&)
from mon.by import By
cheese = driver.find_element(By.PARTIAL_LINK_TEXT, &cheese&)
&通过CSS的定位策略。默认情况下本机浏览器支持CSS定位,所以,请参考W3C&CSS选择器
&http://www.w3.org/TR/CSS/#selectors&&显示一般可用的CSS选择器的列表。如果浏览器没有原生支持CSS查询,可以使用Sizzle(Sizzle是一个纯javascript&CSS选择器引擎)。目前,IE&6,7和FF3.0使用Sizzle的CSS查询引擎。
注意:不是所有浏览器对CSS的支持都是一样的,可能在一个浏览器中运行良好,切换到另一个浏览器则不然。
具体用法如下:
&div id=&food&&
&span class=&dairy&&milk&/span&
&span class=&dairy aged&&cheese&/span&
cheese = driver.find_element_by_css_selector(&#food span.dairy.aged&)
from mon.by import By
cheese = driver.find_element(By.CSS_SELECTOR, &#food span.dairy.aged&)
在高的级别上,尽可能的使用一个浏览器原生的webdriver&XPath&的功能。在一些没有本地的XPath支持的浏览器,我们已经提供了我们自己的实现。这可能会导致一些意想不到的行为,除非你知道各种XPath引擎的差异。
标签和属性名称
本地的XPath支持
HtmlUnit&Driver
当他们出现在HTML
Internet&Explorer&Driver
当他们出现在HTML
Firefox&Driver
不区分大小写
当他们出现在HTML
这点抽象,对于下面这段HTML&代码来说:
&input type=&text& name=&example& /&
&INPUT type=&text& name=&other& /&
inputs = driver.find_elements_by_xpath(&//input&)
from mon.by import By
inputs = driver.find_elements(By.XPATH, &//input&)
不同驱动对大小写的支持:
XPath&expression
1&(“example”)
HTML元素有时并不需要显式地声明,因为他们默认为已知值的属性。例如,“input”的标签并不需要的“type”属性,因为它默认为“text”。webdriver使用XPath时,你不应该期望能够对这些隐含的属性相匹配。
使用JavaScript&
你可以执行任意javascript来找到一个元素,只要你返回一个DOM元素,它将自动转换为一个WebElement对象。
简单的例子,在页面上加载了jQuery:
element = driver.execute_script(&return $('.cheese')[0]&)
在页面上的每一个标签查找所有输入元素:
labels = driver.find_elements_by_tag_name(&label&)
inputs = driver.execute_script(
&var labels = arguments[0], inputs = []; for (var i=0; i & labels. i++){& +
&inputs.push(document.getElementById(labels[i].getAttribute('for'))); }&, labels)
用户输入-填写表单
我们已经看到了如何将文字输入到一个文本或文本字段,但其他元素?您可以“切换”复选框的状态,你可以使用“点击”设置类似选择的选项标记。处理SELECT标签是不是太糟糕:
select = driver.find_element_by_tag_name(&select&)
allOptions = select.find_elements_by_tag_name(&option&)
for option in allOptions:
print &Value is: & + option.get_attribute(&value&)
option.click()
找到页面上第一个“select”的元素,并通过每个选项依次循环,打印出它们的值。你会发现,这不是最有效处理SELECT元素的方式。在webdriver的支持类中,有一个名为“select”,它提供了一些有用的方法,来处理这些交互。
# available since 2.12
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_tag_name(&select&))
select.deselect_all()
select.select_by_visible_text(&Edam&)
从页面上第一个选择开始取消所有选项,从第一个选择页面上的所有选项,然后选择显示的文本与“Edam”&的选项。
当你完成填写表格,你可能要提交。我们需要找到“提交”按钮,然后单击它:
driver.find_element_by_id(&submit&).click()
另外,有方便的方法可以在webdriver的每个元素上的“提交”。如果调用此表单内的元素,webdriver通过的DOM按顺序找到封闭的形式,然后调用该提交。如果该元素不是一种形式,那么会抛出NoSuchElementException异常:
element.submit()
移动Windows和框架(Frames)
一些web应用程序有许多框架或多个窗口。通过webdriver的“switchTo”方法可以对他们呢进行移动操作。
driver.switch_to_window(&windowName&)
调用驱动程序现在解释为被定向到特定的窗口。但是如何知道窗口的名字?以JavaScript或链接的方式打开它看看:
&a href=&somewhere.html& target=&windowName&&Click here to open a new window&/a&
另外,你也可以通过“window&handle”的“switchTo().window()”方法。认识到这一点,那么就可以遍历所有打开的窗口,像这样:
for handle in driver.window_handles:
driver.switch_to_window(handle)
还可以切换从frames到frames(或到iframe中):
driver.switch_to_frame(&frameName&)
访问子frames由一个圆点分隔的路径,并且可以通过其索引指定frames。是:
driver.switch_to_frame(&frameName.0.child&)
would&go&to&the&frame&named&“child”&of&the&first&subframe&of&the&frame&called&“frameName”.All&frames&are&evaluated&as&if&from&*top*. -----实在不知道这个怎么翻译
弹出对话框
Selenium&2.0测试版一开始,内置有处理弹出对话框支持。当你触发一个动作,打开一个弹出框,您将得到以下提醒:
alert = driver.switch_to_alert()
# usage: alert.dismiss(), etc.
这将返回当前打开的警报对象。有了这个对象,你现在可以接受,拒绝,读取其内容,甚至类型会得到一个提示。这个接口同样适用警告,确认和提示。参考到
更多信息。
导航:历史和位置
此前,我们介绍了webdriver的导航使用“get”命令
(driver.get(“”)),我们在有些情况下是要用到导航栏前进和头退功能:
driver.get(&&)
# python doesn't have driver.navigate
重申:“navigate().to()”&和&“get()”&&的效果是一样的。一个只是很多比其他更容易输入!
你可以随意的使用浏览器历史记录中后退和前进功能:
driver.forward()
driver.back()
&请注意,此功能完全依赖于底层浏览器。当你调用这些方法时,在不同的浏览器下可能会发生意想不到的事情
你可能会非常感兴趣了解如何使用Cookie。首先,你需要知道cookie有效期。如果您想先预设的cookie,然后再开始与网站进行交互,你的主页很大/且需要一段时间来加载,一个办法是找到一个更小的网页来代替,通常404页小(
#转到正确的域
driver.get(&&)
#现在在这里的整个域设置的cookie,
#这里的cookie的名称是'key',它的值是'value'的
driver.add_cookie({'name':'key', 'value':'value', 'path':'/'})
# additional keys that can be passed in are:
# 'domain' -& String,
# 'secure' -& Boolean,
# 'expiry' -& Milliseconds since the Epoch it should expire.
# 现在的输出当前URL的所有可用的cookies
for cookie in driver.get_cookies():
print &%s -& %s& % (cookie['name'], cookie['value'])
# You can delete cookies in 2 ways
driver.delete_cookie(&CookieName&)
# Or all of them
driver.delete_all_cookies()
更改用户代理
这是很容易与
下面是一个例子使用执行拖放动作类。本地事件事件需要被激活。
from mon.action_chains import ActionChains
element = driver.find_element_by_name(&source&)
driver.find_element_by_name(&target&)
ActionChains(driver).drag_and_drop(element, target).perform()
驱动程序的细节和权衡
Selenium&webdriver的驱动程序
webdriver的对于不同浏览器通过不同的接口实现;下面介绍这几种实现方式:
HtmlUnit的驱动程序&
这是目前最快,最轻量级的实施webdriver测试。正如它的名字所暗示的,这是基于HtmlUnit的。HtmlUnit是一个java实现基于web浏览器,没有图形用户界面。对于任何语言绑定(Java以外)Selenium服务器需要使用此驱动程序。
driver = webdriver.Remote(&http://localhost:4444/wd/hub&, webdriver.DesiredCapabilities.HTMLUNIT))
&&在Webdriver执行自动化最快的方式
&&一个纯Java的解决方案,因此它是独立于平台的。
&&支持JavaScript的
&&模拟其他浏览器的JavaScript行为(见下文)
HtmlUnit驱动器JavaScript&
&没有流行的浏览器使用JavaScript引擎,使用HtmlUnit(Rhino)。
如果你使用HtmlUnit测试JavaScript&,相比其他浏览&结果可能会不一样。
当我们说“JavaScript”,其实我们说的是“JavaScript和DOM”。虽然DOM是由W3C定义的,每个浏览器都有自己特点和差异,HtmlUnit&有一套完整的实现DOM的方案,能很好的支持JavaScript&,但有别与其他浏览器,和W3C标准的主流浏览器的DOM的实现存在差异,尽管其模仿其有他浏览器的能力。
在webdriver&,我们选择使用HtmlUnit来测试Javascript&,不过这样存在问题和风险,但有越来越多的网站依赖于JavaScript&,我们采取了保守的做法,HtmlUnit默认情况下禁用JavaScript&。在webdriver的HtmlUnit的每个版本,我们重新评估这一决定:我们希望在一些点上HtmlUnit的默认情况下启用JavaScript。
启用JavaScript&
&启用JavaScript的支持是很容易的:
driver = webdriver.Remote(&http://localhost:4444/wd/hub&, webdriver.DesiredCapabilities.HTMLUNITWITHJS)
这将导致HtmlUnit的驱动程序默认情况下,模拟火狐3.6的JavaScript进行处理。
Firefox&Driver
用Firefox的插件来控制火狐浏览器,firefox&配置文件使用selenium.xpi(插件)。默认情况下,需要修改一些设置(
),火狐驱动是能够运行在Windows,Mac,Linux上进行测试。目前在版本3.6,10(这个版本早过时了)
driver = webdriver.Firefox()
&&在一个真正的浏览器上运行,并支持JavaScript的
修改火狐简介
假设你想要修改的用户代理字符串(如上述),但你已经有了一个欺骗Firefox的配置文件,它包含许多有用的扩展。有两种方式获得此配置文件。假设使用Firefox的配置文件管理器(火狐&ProfileManager),已创建配置:
另外,如果配置文件尚未在Firefox注册:
当我们正在开发firefox&启动的特性,我们能够正常使用。
正如我们在
,开发功能,我们能够使用。例如,直到我们感觉本机事件为Linux上的Firefox是稳定的,他们是默认情况下禁用。要启用它们:
profile = webdriver.FirefoxProfile()
profile.native_events_enabled = True
driver = webdriver.Firefox(profile)
Internet&Explorer&Driver
该驱动程序控制.dll,因而只适用于Windows操作系统。每个selenium释放它的核心功能在xp下测试IE版本6,7和8,在Windows7下测试IE&9。
driver = webdriver.Ie()
&&运行在一个真正的浏览器支持JavaScript与最终用户看到的所有的行为一致
&Driver只能在Windows上工作!
&&相对缓慢(尽管仍然是相当快速的)
&&本身不支持XPath的大多数版本。自动注入,这是明显慢于其他浏览器和进行比较时,在同一浏览器的CSS选择器变慢。
&&本身不支持CSS版本6和7。
&&CSS选择器在IE&8和9是本地的,但这些浏览器不完全支持CSS3
的最先进的最新信息,请参阅
。请特别注意所需的配置部分。
Chrome驱动
&Chrome驱动程序维护/支持Chrome&项目本身。webdriver的工作与Chrome通过的chromedriver二进制(Chrome项目的下载页面上找到)。你需要有两个chromedriver和安装一个版本的Chrome浏览器。为了webdriver的自动找到,chromedriver需要要放在系统的路径上。Chrome浏览器本身由chromedriver在默认安装路径找到。这些都可以通过环境变量覆盖。&有关更多信息,请参阅
driver = webdriver.Chrome()
&&在一个真正的浏览器上运行,并支持JavaScript的
&&因为Chrome是基于Webkit的浏览器,
会允许您验证您的网站在Safari的测试效果。需要注意的是,因为浏览器使用其自己的V8&JavaScript引擎,而不是Safari浏览器的Nitro引擎,JavaScript的执行可能会有所不同。
获取与Chrome驱动程序运行
下载&,并按照其他的
Opera&Driver
在上使用Opera驱动程序的信息的selenium维基
iPhone&Driver
selenium维基上使用Mac的iOS驱动程序的信息,
Android&Driver
&硒selenium维基采用了Android驱动程序的信息,
混合使用webdriver和RC技术
Webdriver替换selenium&RC&
webdriver的Java版本的selenium&RC&API提供了一种实现。这意味着,你可以使用Selenium-RC&API和使用底层webdriver的技术。这主要是用于向后兼容。它允许那些使用selenium&RC&API的用户使用webdriver覆盖现有的测试套件。它提供帮助缓解迁移到selenium&webdriver。此外,允许一个人使用这两个API,在相同的测试代码。
Selenium&webdriver的使用是这样的:
&&webdriver的和selenium的API允许并排存在
&&webdriver的迁移管理机制提供了一个简单的Selenium&RC&API
&&不需要独立的Selenium&RC服务器的运行
&&不能支持每一个方法
&&更多先进的selenium使用(using&“browserbot”&or&other&built-in&JavaScript&methods&from&Selenium&Core)可能无法正常工作
&&由于底层实现差异,有些方法可能会比较慢
备份webdriver与selenium
webdriver的尽可能多兼容selenium&RC对浏览器的支持,同时仍然提供支持使用webdriver的API,所以为了您可以利用SeleneseCommandExecutor
Safari是支持这种方式,用下面的代码(确保禁用弹出窗口拦截功能):
这种方法目前有一些主要限制,尤其是findElements并不如预期般运作。此外,繁重的驱动浏览器,因为我们使用的是selenium&的核心,你的JavaScript沙箱限制。
运行独立Selenium服务器使用RemoteDrivers&
从selenium&
下载服务器独立&version&.jar和可选的IEDriverServer。如果您打算使用Chrome,从
拆开IEDriverServer和(或)chromedriver,并把它们在$&PATH&/%PATH%&-&Selenium服务器上的一个目录,这是应该能够IE&/&Chrome的处理请求,而无需额外的修改。
启动服务器的命令行
java -jar &path_to&/selenium-server-standalone-&version&.jar
如果你想使用原生的事件功能,表明在命令行上的选项
Dwebdriver.enable.native.events = 1&
对于其他命令行选项,执行
java -jar &path_to&/selenium-server-standalone-&version&.jar -help
为了正常工作,应该允许以下端口传入的TCP连接: -5(or&twice&as&many&ports&as&the&number&of&concurrent&instances&you&plan&to&run)。在Windows下,你可能需要以及疏通各种应用。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致tensorflow(7)
本文主要介绍Tensorflow在unbuntu下的cuda升级以及一些相关配置–GPU,cuDNN,Cuda SDK。目的是为了解决安装完成tensorflow之后在使用过程中想调整上述相关设置,比如禁用GPU、升级cuda等。
本文内容要求tensorflow已经安装完成,主要涉及GPU版本相关设置
解决的问题:
1、安装了GPU版本的tensorflow,想禁用tensorflow对GPU的使用
2、升级Cuda SDK与cuDNN,以及设置相关配置
1、安装Cuda SDK
官网下载和安装,选择合适的系统版本下载,本文为介绍基于ubuntu系统的版本,个人建议下载runfile(local)的Installer Type。关于显卡驱动的安装可以参见()
如果下载文件runfile(local),大小约为1G+,文件名称格式为‘cuda_x.x.xx_linux.run’(其中x为数字,表示版本),按照下载页面安装指导安装即可。
sudo Run `sudo sh cuda_x.x.xx_linux.run`
安装过程中会设置安装路径,如果是7.5版本,那么默认安装在路径‘/usr/local/cuda-7.5’,并在‘/usr/local/cuda’做一份映射,此项为可选项目,如果不想覆盖前版,可以不做映射。
安装完成需要添加路径,特别是在安装不同版本的cuda共存情况下。需要在profile或.bashrc中添加一下内容:
PATH=$PATH:/usr/local/cuda-7.5 (CUDA安装路径)
LD_LIBRARY_PATH=$LA_LIBRARY_PATH:/usr/local/cuda-7.5/lib64
PATH=$PATH:/usr/local/cuda
LD_LIBRARY_PATH=$LA_LIBRARY_PATH:/usr/local/cuda/lib64
2、安装cuDNN
官网下载和安装,择合适的系统版本下载,需要注意的是,版本的选择与已经安装的Cuda Toolkit版本有关,否则会报错。
E tensorflow/stream_executor/cuda/cuda_dnn.cc:286] Loaded cudnn library: 5005 but source was compiled against 4007. If using a binary install, upgrade your cudnn library to match. If building from sources, make sure the library loaded matches the version you specified during compile configuration.
下载的文件名为,‘cudnn-#.#-linux-x64-v*.tgz’,大约80M左右,其中#.#为版本号–如‘8.0’,v*为版本–如‘v5’。
tar xvzf cudnn-7.0-linux-x64-v4.tgz
sudo cp cudnn-7.0-linux-x64-v4/cudnn.h /usr/local/cuda/include
sudo cp cudnn-7.0-linux-x64-v4/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
cuDNN安装完成
3、配置tensorflow
如果tensorflow是使用whl文件安装,需要下载源码进行配置,官网推荐下载地址
或者使用命令下载
进入下载的tensorflow目录,以root权限运行文件‘configure’
$ sudo ./configure
#开始设置或更改配置
#设置与tensorflow关联的python路径
Please specify the location of python. [Default is /usr/bin/python]:
#设置是否开启GPU支持
Do you wish to build TensorFlow with GPU support? [y/N] y
GPU support will be enabled for TensorFlow
#设置所安装的Cuda SDK版本
Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave
empty to use system default]: 7.5
#设置关联的cuda sdk安装路径
Please specify the location where CUDA 7.5 toolkit is installed. Refer to
README.md for more details. [default is: /usr/local/cuda]: /usr/local/cuda
#设置cuDNN的版本
Please specify the Cudnn version you want to use. [Leave empty to use system
default]: 7.0
#设置cudnn的库文件所存放的路径,即与之前设置的相同,
#确认后将会根据路径与版本号自动扫描搜索是否有相关库文件
Please specify the location where the cuDNN 7.0 library is installed. Refer to
README.md for more details. [default is: /usr/local/cuda]: /usr/local/cuda-7.5
Please specify a list of comma-separated Cuda compute capabilities you want to
build with. You can find the compute capability of your device at:
/cuda-gpus.
#选择gpu的计算能力,可以去官网查看相应型号GPU的计算能力&/cuda-gpus&
Please note that each additional compute capability significantly increases your
build time and binary size. [Default is: \"3.5,5.2\"]: 3.5
Setting up Cuda include
Setting up Cuda lib64
Setting up Cuda bin
Setting up Cuda nvvm
Configuration finished
对tensorflow的cuda升级,配置完成
相关链接:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11488次
排名:千里之外温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2219)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'webdriver 关于元素的常用操作 python版本',
blogAbstract:'\r\n新建实例driver = webdriver.Firefox()\r\n1.获取当前页面的Url函数\r\n方法:current_url\r\n实例:\r\ndriver.current_url\r\n\r\n2.获取元素坐标\r\n方法:location\r\n解释:首先查找到你要获取元素的,然后调用location方法\r\n实例:\r\ndriver.find_e',
blogTag:'webdriver',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:8,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 显卡驱动程序版本 的文章

 

随机推荐