1.什么是JavaScript及简单编写JS代码

前端工程师学的编程语言(HTML,CSS,JavaScript,Vue)

JavaScript 负责页面的动作,跳转等动态化的效果

Vue不是编程语言,只是JavaScript的一种框架而已

为什么前端开发要学JavaScript,因为所有的浏览器都内置安装了JavaScript的运行环境

下面我们来看一下如何编写简单的JS代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>py44</title>
</head>
<body>
<!--    标题-->
<h2>hello</h2>
<form><!--    下拉框--><select name="myselect"><option>选项1</option><option>选项2</option><option>选项3</option></select>
</form>
<!--js脚本-->
<script>alert('hello!')// 相当于python中的printconsole.log('hello!')// 定义变量var name = 'Mara'console.log(name)let lastname = 'wang'console.log(lastname)// iflet age = 18if (age >= 10) {console.log('已成年')} else {console.log('未成年')}// 函数function run() {console.log('run')}run()
</script>
</body>
</html>

运行结果:

在网页是看不到JS代码输出的内容,要按F12,在console下查看输出内容

一门编程语言的东西还是很多的,也没有那么容易学会的,具体的可以参考各种网站上学习 JavaScript 实例 | 菜鸟教程

2.DOM对象

DOM是文档对象模型

HTML这些标签归根结底就是字符串,不方便被程序访问和控制,因此浏览器通过DOM这种方式把文档转化成了对象,方便程序进行访问。

现在我们通过F12打开浏览器的控制台,对打开的网页进行一些简单的DOM操作。在控制台当中输入document,浏览器当中将会显示整个HTML标签内容,输入document.body显示打开页面的整个body标签。

这样通过DOM面向对象的编程方式能非常方便的获取到想要的元素,也能非常方便的执行浏览器操作。

document 是DOM对象下面的一个东西,document 不能直接说就是DOM

具体操作如下:

总结:DOM就是通过JS控制浏览器当中的页面行为

3.BOM对象

BOM是浏览器对象模型

提供了独立于内容而与浏览器窗口进行交互的对象。描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作,譬如可以弹出新的窗口,改变状态栏中的文本,对Cookie的支持,IE还扩展了BOM,加入了ActiveXObject类,可以通过js脚本实例化ActiveX对象等

BOM和DOM的主要区别:

  • BOM的最根本对象是window,BOM和浏览器关系密切。浏览器的很多东西可以通过JavaScript控制的,例如打开新窗口、打开新选项卡(标签页)、关闭页面,把网页设为主页,或加入收藏夹等这些涉及到的对象就是BOM
  • DOM最根本对象是document(实际上是window.document)DOM和文档有关,这里的文档指的是网页,也就是HTML文档。网页是由服务器发送给客户端浏览器的,无论用什么浏览器,接收到的HTML都是一样的,所以DOM和浏览器无关

接着我们就要用python代码中的selenium来控制JS来进行页面操作

4.打开新窗口

import timefrom selenium.webdriver import Chromeclass TestJs:def testjs(self):with Chrome() as browser:browser.implicitly_wait(5)# selenium发送JS(window.open())代码给浏览器操作browser.execute_script("window.open()")time.sleep(5)

运行结果:

5.窗口滚动

具体代码如下:

import timefrom selenium.webdriver import Chromeclass TestJs:def testjs(self):with Chrome() as browser:browser.implicitly_wait(5)browser.get('https://readhub.cn/topics')js = 'window.scrollTo(0,document.body.scrollHeight)'browser.execute_script(js)time.sleep(5)

还有一种页面是整个窗口有个滚动条,页面里边列表也有滚动条,如下图:

先定位列表整个元素,然后控制页面中列表进行滚动

代码具体如下:

import timefrom selenium.webdriver import Chromeclass TestJs:def testjs(self):with Chrome() as browser:browser.implicitly_wait(5)browser.maximize_window()browser.get('https://drafts.csswg.org/cssom-view/#common-infrastructure')js = 'document.getElementById("toc").scrollTo(0,document.body.scrollHeight)'browser.execute_script(js)time.sleep(5)

如果想滚动1/2那就这么写:scrollTo(0,document.body.scrollHeight/2)

如果想滚动1/4那就这么写:scrollTo(0,document.body.scrollHeight/4)

6.修改元素状态

如下图,要修改12306页面当中的出发日期

具体代码如下:

第一种方法:所有的定位元素,修改值都通过js代码编写

import timefrom selenium.webdriver import Chromeclass TestJs:def testjs(self):with Chrome() as browser:browser.implicitly_wait(5)browser.maximize_window()browser.get('https://www.12306.cn/index/')# js代码单行编写# js = 'el = document.getElementById("train_date");el.value="2021-12-16"'# js代码单行编写js = '''el = document.getElementById("train_date")el.value="2021-12-16'''browser.execute_script(js)time.sleep(5)

第二种方法:使用selenium定位元素,通过js代码修改值

import timefrom selenium.webdriver import Chromeclass TestJs:def testjs(self):with Chrome() as browser:browser.implicitly_wait(5)browser.maximize_window()browser.get('https://www.12306.cn/index/')el = browser.find_element('id', 'train_date')# arguments[0]表示一个占坑符js = 'arguments[0].value="2021-12-16"'# execute_script后面可以跟多个参数,只要对应的索引号正确即可browser.execute_script(js, el, el, el)time.sleep(5)

7.文件上传

  • input类型,直接使用send_key()
import timefrom selenium.webdriver import Chromeclass TestJs:def testjs(self):with Chrome() as browser:browser.implicitly_wait(5)browser.maximize_window()browser.get('file:///E:/lemon/lianxi/day33_selenuim/demo.html')el = browser.find_element('name', 'file')el.send_keys(r'E:\lemon\lianxi\day33_selenuim\2.png')time.sleep(5)

  • js类型:需要用到系统原生的组件,所有的拖动上传都会有一个隐藏的input标签,如果无法定位,先通过js修改,再定位

import timefrom selenium.webdriver import Chromeclass TestJs:def testjs(self):with Chrome() as browser:browser.implicitly_wait(5)browser.maximize_window()browser.get('https://image.baidu.com/')# querySelector是查看CSS方式定位元素js = '''el = document.querySelector('input[type="file"]');el.style='';'''browser.execute_script(js)element = browser.find_element('xpath', '//input[@type="file"]')element.send_keys(r'E:\lemon\lianxi\day33_selenuim\2.png')time.sleep(5)
  • 通过系统打开框上传文件
  1. windoss平台--pywinauto
  2. 跨平台(所有系统都可以)-- pyautoui

pywinauto:

安装这个第三方库时,要注意安装0.6.x以后的版本,因为这个版本之前的没有Desktop模块

pip install pywinauto==0.6.8

注意:le.click()限制比较多,只能点击a标签,button标签等,容易出错,所以尽量换一种写法

ActionChains(browser).click(el).perform()
import time
from selenium.webdriver import Chrome, ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as when
from selenium.webdriver.support.wait import WebDriverWait
from pywinauto import Desktopclass TestJs:def testjs(self):with Chrome() as browser:browser.maximize_window()browser.get('https://image.baidu.com/')el = browser.find_element(By.CSS_SELECTOR, '.st_camera_off')ActionChains(browser).click(el).perform()wait = WebDriverWait(browser, timeout=10)condition = when.element_to_be_clickable((By.CSS_SELECTOR, '#uploadImg'))file_btn = wait.until(condition)ActionChains(browser).click(file_btn).perform()app = Desktop()  # 桌面dialog = app['打开']  # 根据名字找到弹出窗口dialog['Edit'].type_keys(r'E:\lemon\lianxi\day33_selenuim\2.png')dialog['Button'].click()time.sleep(3)

pyautogui:

安装这个第三方库时,我的python是3.8版本,老是安装不上,经查确定需要先安装PyGetWindow再安装pyautogui

pip install PyGetWindow==0.0.1

pip install pyautoui

import time
from selenium.webdriver import Chrome, ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as when
from selenium.webdriver.support.wait import WebDriverWait
import pyautoguiclass TestDemo:def testdemo(self):with Chrome() as browser:browser.maximize_window()browser.get('https://image.baidu.com/')el = browser.find_element(By.XPATH, ' //img[@class="st_camera_off"]')ActionChains(browser).click(el).perform()wait = WebDriverWait(browser, timeout=10)condition = when.element_to_be_clickable((By.XPATH, '//a[@id="uploadImg"]'))file_btn = wait.until(condition)ActionChains(browser).click(file_btn).perform()time.sleep(1)  # 一定要有这步,不然出现用例通过,但打开选择文件窗口后定住的问题pyautogui.write(r'E:\lemon\lianxi\day33_selenuim\2.png')pyautogui.press('enter', 2)time.sleep(3)

web页面-JS/DOM/BOM/窗口滚动/修改内容/上传文件相关推荐

  1. 如何修改Kestrel上传文件的大小

    作为.NET程序员我们都清楚如何修改.NET Web程序上传文件的大小,但是我最近在做.NET Core 项目的时候发现我不清楚如何修改Kestrel上传文件的大小,经过翻阅微软官方文档我成功实现了修 ...

  2. 如何修改WebUpload上传文件默认调用系统相机,而不是手机相册?

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  3. java怎么上传文件到web服务器_Java客户端通过Http发送POST请求上传文件到web服务器...

    http://www.cnblogs.com/WilliamJiang/archive/2012/04/29/2475883.html 1.朋友的一个需求,让我给他实现,需求是这样的,需要用ASP.n ...

  4. php上传文件大小读取,怎么修改php上传文件的大小限制?

    修改php上传文件大小限制的方法:首先打开php.ini配置文件:然后分别查找并修改"post_max_size"项."upload_max_filesize" ...

  5. 修改IIS6上传文件限制,下载附件大小限制

    默认情况下,在IIS 6 全局配置中允许上传的文件长度最大为4 GB,但是在Web站点级却限制了ASP应用程序上传的最大文件长度为200 KB.如果你需要上传超过200KB的文件,则需要手动修改IIS ...

  6. 修改PHP上传文件的大小限制

    Warning: POST Content-Length of 35052172 bytes exceeds the limit of 8388608 bytes in Unknown on line ...

  7. js 监听 复制图片 拖拽上传文件 并填充到markdown编辑器

    文章目录 效果 获取粘贴的文件 获取拖拽的文件 发送请求 生成markdown 语句 实现逻辑代码(主要实现) 后端代码 效果 获取粘贴的文件 const { clipboardData } = e; ...

  8. [js]uploadify结合jqueryUI弹出框上传,js中的冒出的bug,又被ie坑了

    引言 最近在一个项目中,在用户列表中需要对给没有签名样本的个别用户上传签名的样本,就想到博客园中上传图片使用弹出框方式,博客园具体怎么实现的不知道,只是如果自己来弄,想到两个插件的结合使用,在弹出框中 ...

  9. 修改phpmyadmin上传文件大小限制

    phpmyadmin导入SQL文件时涉及到phpmyadmin上传文件大小限制问题,默认phpmyadmin上传文件大小为2M,如果想要phpmyadmin上传超过2M大文件,就需要修改phpmyad ...

  10. Web页面右下角弹出窗口示例代码

    Web页面右下角弹出窗口示例代码 声明:本代码来源于CSDN论坛,原帖为http://community.csdn.net/Expert/TopicView3.asp?id=5239784 版权归原作 ...

最新文章

  1. 返回顶部的js实现(jQuery/MooTools)
  2. MongoDB:逐渐变得无关紧要
  3. JSON数据的HTTP Header应该怎么标记?
  4. 第一次简单总结CPU工作原理
  5. reflective dll injection 反射注入
  6. Android 截图并保存到相册
  7. 【SSL】SSL工作原理
  8. android 调用系统播放器
  9. 编写基于Property-based的单元测试
  10. 记一次 .NET医院公众号程序 线程CPU双高分析
  11. 对存储还搞不清楚,先看看这篇文章-从51单片机上去理解存储器
  12. PostgreSQL 常见操作
  13. ModuleNotFoundError No module named urllib2
  14. SAP 生产订单变更管理 OCM Order Changement Management
  15. 这 26个中国式创新,征服了全世界
  16. python爬取微信运动_用 Python 修改微信(支付宝)运动步数,轻松 TOP1
  17. python计算复合材料层合板ABD刚度矩阵、预测层合板强度
  18. NRF52832-USB-Dangle-DIY笔记
  19. CNI 网络分析 4.4 Calico IPIP
  20. Python之使用LRU缓存策略进行缓存

热门文章

  1. python颜色的数字代码_python – 更改QLCD数字的数字颜色
  2. Xmy的Python----Numpy库
  3. JavaScript 网页特效
  4. Photoshop软件介绍
  5. 【沧海拾昧】微机原理:并行接口电路8255芯片
  6. 七大常见排序,你究竟懂几个?(下)
  7. 麒麟810处理器_华为携7nm麒麟810处理器 剑指高通
  8. 未来-YLB-跳蚤市场:跳蚤市场(flea market)
  9. 统计-均匀分布生成其他分布的两种方法
  10. 指导手册05:MapReduce编程入门