如何使用带有Python的Selenium模块在变量中获取HTML源代码?
我想做这样的事情:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get(raw_input("Enter URL: "))
if "whatever" in html_source:
# Do something
else:
# Do something else
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我不知道如何访问HTML源代码.
我认为网络上的一个众所周知的最佳做法是不信任任何输入.这句话
"所有的投入都是邪恶的."
可能是输入验证方面引用最多的引用.现在,对于HTML,您可以使用DOMPurify等工具对其进行清理.
我的问题是,如果我有运行Express和身体解析器中间件的Node.js服务器来接收和解析JSON,我是否还需要运行任何清理?
我(也许天真?)的想法是JSON只是数据,没有代码,如果有人发送无效的JSON,身体解析器(JSON.parse()内部使用)无论如何都会失败,所以我知道我的应用程序将收到一个有效的JavaScript对象.只要我没有运行eval或调用函数,我应该没事,不应该吗?
我错过了什么吗?
我只是想从运行Selenium的人那里得到一些意见(http://selenium.openqa.org)我在WaTiN方面有很多经验,甚至还为它写了一套录音套件.我有它生成一些结构良好的代码,但只是由我维护,似乎我的公司几乎放弃了它.如果你已经运行了硒,你有很多成功吗?我将使用.NET 3.5,Selenium能很好地使用它吗?生成的代码是干净的还是只是所有交互的列表?(http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx)分布式测试套件的公平性如何?
任何其他抱怨或赞美系统将不胜感激!
我最近将我的chrome版本升级到60并将chromedriver升级到版本2.31.发布当我尝试最大化浏览器窗口时,我已经开始获得以下异常.
driver.driver.manage().window().maximize()
Run Code Online (Sandbox Code Playgroud)
org.openqa.selenium.WebDriverException:未知错误:无法将窗口状态更改为最大化,当前状态正常(会话信息:chrome = 60.0.3112.78)(驱动程序信息:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform = Linux 4.2 .0-27-generic x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:108毫秒构建信息:版本:'2.53.1',修订版:'a36b8b1cd5757287168e54b817830adce9b0158d',时间:'2016-06 -30 19:26:09'系统信息:主机:'bb-blr-prod-stage-stg1-01',ip:'10 .3.211.2',os.name:'Linux',os.arch:'amd64' ,os.version:'4.2.0-27-generic',java.version:'1.7.0_80'会话ID:c7de7149dd490cc7760d2f4fc49f0325驱动信息:org.openqa.selenium.chrome.ChromeDriver Capabilities [{platform = LINUX,acceptSslCerts = true ,javascriptEnabled = true,browserName = chrome,chrome = {userDataDir =/tmp/.org.chromium.Chromium.WABPhO,chromedriverVersion = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8)},networkCo nnectionEnabled = false,unexpectedAlertBehaviour =,rotate = false,setWindowRect = true,locationContextEnabled = true,mobileEmulationEnabled = false,pageLoadStrategy = normal,version = 60.0.3112.78,takesHeapSnapshot = true,cssSelectorsEnabled = true,databaseEnabled = false,handlesAlerts = true,browserConnectionEnabled = false,webStorageEnabled = true,nativeEvents = true,hasTouchScreen = false,applicationCacheEnabled = false,takesScreenshot = true}]
我在Geb上使用ChromeDriver在无头模式下运行我的测试.
我使用Selenium开发了一些Python脚本,最初是PhantomJS.在转向自动下载的同时,我切换到(朝向)Firefox(已经工作),然后使用无头选项切换Chrome,因此我不会在我面前打开浏览器.
我的第一个脚本访问一个页面和几个HTML元素,与无头Chrome完美配合.
然而,第二个只适用于Chrome.如果我添加"无头"选项,它将不再起作用.当我尝试在无头模式下打印HTML以查看为什么它找不到我正在寻找的HTML元素时,我只有:
<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>
Run Code Online (Sandbox Code Playgroud)
使用标题Chrome,我有一个完整的HTML打印.这就是我开始无头Chrome的方式:
options = webdriver.ChromeOptions()
options.add_argument("--ignore-certificate-errors")
options.add_argument("headless")
driver = webdriver.Chrome(chrome_options=options)
Run Code Online (Sandbox Code Playgroud)
再次注意,这适用于我的另一个脚本.这里唯一的区别是我需要登录才能访问该页面,但即便如此,为什么它会与头部一起工作?填写表单,我的脚本无论如何都会自动登录.
Python:3.6.1,Chrome:60.0.3112.78(64位),Selenium:3.4.3
任何的想法 ?谢谢.
编辑:这是代码的开头
url = 'https://10.11.227.21/tmui/'
driver.get(url + "login.jsp")
html_source = driver.page_source
print(html_source)
blocStatus = WebDriverWait(driver, TIMEOUT).until(EC.presence_of_element_located((By.ID, "username")))
inputElement = driver.find_element_by_id("username")
inputElement.send_keys('actualLogin')
inputElement = driver.find_element_by_id("passwd")
inputElement.send_keys('actualPassword')
inputElement.submit()
Run Code Online (Sandbox Code Playgroud) 我的 Jenkins 构建在构建和构建后步骤之间挂起。
控制台输出显示有 6 分钟的等待(但我已经看到等待长达一小时):
10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0
Run Code Online (Sandbox Code Playgroud)
我发现这个和这个问题有类似的问题,他们说解决方案是-DSoftKillWaitSeconds=0在jenkins.xml.
但是,我需要一种方法来仅为特定作业设置选项,而不会弄乱全局 Jenkins 设置(我不想弄乱其他项目)。
编辑:
当我手动中止作业时,在 [CucumberReport] 步骤之前,仍会生成 Cucumber 报告。
我还检查了构建环境选项中的如果构建被卡住复选框,则中止构建,超时策略设置为No Activity(超时秒数 = 2)。
当我使用这些设置构建项目时,构建将失败,并在构建历史记录中显示“0 秒后中止”,但控制台输出将相同。(没有任何变化,黄瓜报告将生成,但在一定的超时后)。
我chromedriver 88按照要求安装了版本,但我的版本 chrome 是87.0.4280.88最后一个版本(测试版之外)
同时我也要求下载version 88的chrome
这是错误:
selenium.common.exceptions.SessionNotCreatedException:
Message: session not created: This version of ChromeDriver only supports Chrome version 88
Current browser version is 87.0.4280.88 with binary path
C:\Program Files\Google\Chrome\Application\chrome.exe
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我有一个Katalon测试套件设置,它在用户界面和我安装了Katalon studio的机器上的CLI中运行良好.
我有一个在Docker容器中运行的Jenkins CI服务器,我想设置一个工作来在Jenkins服务器上运行我的测试套件.
我在Jenkins服务器上需要什么运行时才能运行Katalon作业?Jenkins是否有运行时或插件?
如果没有,是否有可用于通过jenkins远程运行作业的Katalon码头工具箱,如SonarQube的东西?
我知道katalon技术是建立在硒之上的.
我也知道Groovy有一些非常强大的测试功能.
但是,卡塔隆有点被低估了吗?
在某种程度上,有人应该选择两者中的一种来使用吗?
是否可以选择将录制的测试脚本导出到Katalon工作室的Java/JUuit(类似于slenium IDE)?因为我正在处理的应用程序只与IE兼容; 所以我不能使用selenuim IDE.所以我不得不找其他工具来播放/录制会话.
提前感谢您的帮助!谢谢!
selenium cucumber-jvm selenium-webdriver cucumber-java katalon-studio
selenium ×7
python ×3
java ×2
jenkins ×2
build ×1
cucumber-jvm ×1
docker ×1
dompurify ×1
geb ×1
gradle ×1
groovy ×1
headless ×1
javascript ×1
json ×1
node.js ×1
sanitization ×1
ui-testing ×1
unit-testing ×1