from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import json
import time
driver = webdriver.Edge()
def login_scan():
#驱动器下载链接https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
#放到D:/pon/Scripe
driver.get('https://www.huya.com')
# 程序打开网页后12秒内 “扫码登陆账户”
time.sleep(15)
login_scan() # 扫码登录
with open('cookies1.txt','w') as f:
# 将cookies保存为json格式
f.write(json.dumps(driver.get_cookies()))
driver.close()
driver = webdriver.Edge()
def login():
option = webdriver.EdgeOptions()
option.add_experimental_option("detach", True)
driver.get('https://www.huya.com')
time.sleep(7)
# driver.delete_all_cookies()
option = webdriver.EdgeOptions()
option.add_experimental_option("detach", True)
with open('cookies1.txt', 'r') as f:
cookies_list = json.load(f)
for cookie in cookies_list:
driver.add_cookie(cookie)
driver.refresh()
time.sleep(8)
login() #登录虎牙
def into_income():
# 定位鼠标悬停元素
el = driver.find_element(By.XPATH,'//*[@id="J_duyaHeaderRight"]/div/div[2]/a/img')
ActionChains(driver).move_to_element(el).perform() # 鼠标悬停
time.sleep(2)
driver.find_element(By.XPATH,'//*[@id="J_duyaHeaderRight"]/div/div[2]/div/div/div/div/div[3]/ul/li[1]/a/p').click()
time.sleep(3) #已进入个人中心
n = driver.window_handles # 这个时候会生成一个新窗口或新标签页的句柄,代表这个窗口的模拟driver
print('当前句柄: ', n) # 会打印所有的句柄
driver.switch_to.window(n[-1])
print(driver.title) #直播个人中心
driver.maximize_window() #窗口最大化
driver.execute_script("window.scrollBy(0,800)")
ele = driver.find_element(By.XPATH,'//*[@id="profileRoom"]/div/i')
ActionChains(driver).move_to_element(ele).perform() # 鼠标悬停
time.sleep(1)
driver.find_element(By.XPATH,'//*[@id="profileRoom"]/div/i').click()
#点击主播收入
driver.find_element(By.XPATH,'//*[@id="profile-menu"]/li[6]/a').click()
into_income() #进入主播收入
time.sleep(2)#点击交友模式
driver.find_element(By.XPATH,'//*[@id="tab-click"]/div[1]/ul/li[7]/a').click()
time.sleep(3)
#选择开始日期
driver.find_element(By.XPATH,'//*[@id="datetime"]').click()
js1 = """
var date = document.getElementById("datetime");
date.value = arguments[0];
"""
driver.execute_script(js1,'2022-09-12')
time.sleep(2)
#选择结束日期
driver.find_element(By.XPATH,'//*[@id="endTime"]').click() #成功,点击日期!!!
js2 = """
var date = document.getElementById("endTime");
date.value = arguments[0];
"""
driver.execute_script(js2,'2022-09-18')
time.sleep(2)
#输入虎牙号
clear_empty=driver.find_element(By.XPATH,'//*[@id="guestYY"]')
clear_empty.clear()
time.sleep(1)
huya_name=driver.find_element(By.XPATH,'//*[@id="guestYY"]')
huya_name.send_keys('huya_num')
time.sleep(1)
def find_sum():
driver.find_element(By.XPATH,'//*[@id="look"]').click()
time.sleep(3)
#向下滚动
driver.execute_script("window.scrollBy(0,500)")
time.sleep(3)
#定位总价金额
find_sum()
z1=driver.find_element(By.XPATH,"//*[contains(text(),'总价')]")
z1=z1.text
lst=['name1','name2']
print(lst[0],z1)
time.sleep(3)
clear_empty.clear()
time.sleep(1)
huya_name.send_keys('huya_num')
time.sleep(3)
find_sum()
z2=driver.find_element(By.XPATH,"//*[contains(text(),'总价')]")
z2=z2.text
print(lst[1],z2)
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
我将Cucumber与Ruby结合使用。通过Selenium-Webdriver在Chrome中运行测试时,我想将下载位置更改为测试文件夹而不是用户下载文件夹。我当前的chrome驱动程序是这样设置的:Capybara.default_driver=:seleniumCapybara.register_driver:seleniumdo|app|Capybara::Selenium::Driver.new(app,:browser=>:chrome,desired_capabilities:{'chromeOptions'=>{'args'=>%w{window-size=1920,1
我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act
1、接口请求基本操作1.1例子tips在view的选项可以zoomin调整窗口字帖大小。1、创建一个测试的workspace,并命名为test2、test后面新增一个addrequest3、选择发送GET,URL为一个开源的https://api.apiopen.top/api/sentences获取每日一句4、点击send查看内容Tips:如果提示出现Error:tunnelingsocketcouldnotbeestablished,statusCode=407错误,参照以下解决办法)关于tunnelingsocketcouldnotbeestablished,cause=getaddri
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好