2023年1月19日15:25:16
 1.
 vsIDE编程python
 python路径:C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_86
 python_pip路径(可添加到环境变量):C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_86\Scripts
 第三方库路径:C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_86\Lib\site-packages
1.下载谷歌浏览器:Chroma:\version->查看版本
 2.下载谷歌驱动:chromedriver.storage.googleapis.com/index.html->根据版本下载驱动
 3.将驱动复制到pip路径
error1:name ‘by’ is not define->from selenium.webdriver.common.by import By
 error2:handshake failed; returned -1, SSL error code 1, net_error -101->
s = Service(executable_path=‘C:\Program Files\Google\Chrome\Application\chromedriver.exe’)
 chrome_options = webdriver.ChromeOptions()
 chrome_options.add_argument(‘–ignore-certificate-errors’) # 忽略证书错误
 driver = webdriver.Chrome(service=s, options=chrome_options)
#这个语句是自动找到对应版本的驱动
 browser = webdriver.Chrome(ChromeDriverManager().install())
5.自动关闭:
 可以通过设置选项来取消
2023年1月20日10:39:42
 1.
 F12查看网页源码->在console里输入 x ( " / / i n p u t [ @ i d = ′ k w ′ ] " ) − > 查找 c s s 元素 − > x("//input[@id='kw']") ->查找css元素-> x("//input[@id=′kw′]")−>查找css元素−>(“CSS选择器”)
F12查看网页源码后,再点左上角的箭头
XPATH用AND 或者 OR来联合
 $x(“//a[@class=‘navitems-lk’ and @class=‘navitems-lk’]”)
元素级等待机制的最佳实践方式是显式等待,它是一种相当完美的等待机制。
 from selenium.webdriver.support.wait import WebDriverWait
2023年1月26日09:38:59
 1.
 写csv,编码要用gbk写中文:
 csvHeaders = [“序号”, “名称”, “价格”]
 with open(“D:\TestBooks.csv”, “w”, newline=“”, encoding=“gbk”) as f:
 f_csv = csv.writer(f)
 f_csv.writerow(csvHeaders)
嵌入的页面
 driver.switch_to_frame(“f2”)
 br.switch_to.default_content()
3.等待延时:
 ①driver.set_page_load_timeout(5) #全局设置,在整个实例的声明周期
 ②driver.implicitly_wait(5) #全局设置,隐式等待,findelement在规定时间内找元素
③from selenium.webdriver.support.wait import WebDriverWait
 WebDriverWait(driver,10).until(registerLink(driver));#显示等待
 WebDriverWait(driver,10).until(lambda p:p.find_element(By.LINK_TEXT,“rightnow”).is_displayed())
 targetLocator = (By.LINK_TEXT,“RN”)
 WebDriverWait(driver,10).until(expected_conditions.visibility_of_element_located(targetLocator))
from selenium.webdriver import ChromeOptions
 option = ChromeOptions()
 option.add_experimental_option(‘excludeSwitches’, [‘enable-automation’])#开启实验性功能
 browser=webdriver.Chrome(options=option)
 script = ‘’’
 Object.defineProperty(navigator, ‘webdriver’, {
 get: () => undefined
 })
 ‘’’
 browser.execute_cdp_cmd(“Page.addScriptToEvaluateOnNewDocument”, {“source”: script})
 browser.get(‘https://www.taobao.com’)
 这样可以更改window.navigator.webdriver的值为undefined
2023年1月28日16:13:19
 1.
 #更改user-agent
 options.add_argument(‘User-Agent=Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36’)
 2.
 #更改设置
 options.add_argument(‘–disable-infobars’) # 禁止策略化
 options.add_argument(‘–no-sandbox’) # 解决DevToolsActivePort文件不存在的报错
 options.add_argument(‘window-size=1920x3000’) # 指定浏览器分辨率
 options.add_argument(‘–disable-gpu’) # 谷歌文档提到需要加上这个属性来规避bug
 options.add_argument(‘–incognito’) # 隐身模式(无痕模式)
 options.add_argument(‘–disable-javascript’) # 禁用javascript
 options.add_argument(‘–start-maximized’) # 最大化运行(全屏窗口),不设置,取元素会报错
 options.add_argument(‘–disable-infobars’) # 禁用浏览器正在被自动化程序控制的提示
 options.add_argument(‘–hide-scrollbars’) # 隐藏滚动条, 应对一些特殊页面
 options.add_argument(‘blink-settings=imagesEnabled=false’) # 不加载图片, 提升速度
 options.add_argument(‘–headless’) # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
 options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手动指定使用的浏览器位置
 3.
 去除navigator反爬虫
 from selenium import webdriver
 browser = webdriver.Chrome()
 script=‘’‘Object.defineProperties(navigator, {webdriver:{get:()=>undefined}})’‘’
 browser.execute_script(script)
 4.
 一个字节(BYTE)=8bit
 常见字符集名称:GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等
 ASCII字符集:英文字符均占1个字节
 Unicode:所有字符都是两个字节,对于英文字符,高字节为0,低字节与ASCII码相同
 GB2312:一个小于127的字符的意义与原来相同, 但两个大于127的字符连在一起时, 就表示
 一个汉字, 前面的一个字节(他称之为高字节)从0xA1用到 0xF7, 后面一个字节(低字节)
 从0xA1到0xFE, 这样我们就可以组合出大约7000多个简体汉字了. 在这些编码里, 我们还
 把数学符号,罗马希腊的 字母,日文的假名们都编进去了, 连在 ASCII 里本来就有的数字
 ,标点,字母都统统重新编了两个字节长的编码, 这就是常说的"全角"字符, 而原来在127
 号以下的那些就叫"半角"字符了
段落:
 1、 代表开始以html形式展开、这是网页必须存在的
 2、有这个/斜扛的都是代表这个标签结束,与上面的标签对等、所有的标签都必须要有/斜杠
 3、代表开始、头部的意思
 4、
5、是换行的意思、包含在tr里面的每个标签都换行
7、
| 代表是表头、也可以说是字段名 6、 | 
|---|
| 意思为“单元格”,用于定义HTML表格中的标准单元格,可以包含数据 8、 | 
JavaScript
 ①要用围起来
 ②结尾要;
 ③您可以在 HTML 文档中放入不限数量的脚本。
 脚本可位于 HTML 的 或 部分中,或者同时存在于两个部分中。
 通常的做法是把函数放入 部分中,或者放在页面底部。这样就可以把它们安置到同一处位置,不会干扰页面的内容。
 ④也可以把脚本保存到外部文件中。外部文件通常包含被多个网页使用的代码。
 外部 JavaScript 文件的文件扩展名是 .js。
 如需使用外部文件,请在 
1.写文本:
 document.write(“
这是一个标题
”);document.write(“
这是一个段落。
”);2.按钮:
点我!
3.改变HTML内容
x=document.getElementById(“demo”); //查找元素
x.innerHTML=“Hello JavaScript”; //改变内容
4.改变图片
function changeImage()
{
element=document.getElementById(‘myimage’)
if (element.src.match(“bulbon”))
{
element.src=“/images/pic_bulboff.gif”;
}
else
{
element.src=“/images/pic_bulbon.gif”;
}
}
5.改变HTML样式
x=document.getElementById(“demo”) //找到元素
x.style.color=“#ff0000”; //改变样式
6.
验证输入
if isNaN(x) {
alert(“不是数字”);
}
7.
if(isNaN(x)||x.replace(/(^\s*)|(\s*$)/g,“”)==“”){
alert(“不是数字”);
}
CSS
 写法:
如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器。
 id 选择器:
 #para1
 {
 text-align:center;
 color:red;
 }
 class 选择器:
 .center {text-align:center;}
外部样式表:
内部样式表:
内联样式:
这是一个段落。
(内联样式)Inline style > (内部样式)Internal style sheet >(外部样式)External style sheet > 浏览器默认样式cookie格式:
 NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
在正常情况下,Cookie值可以由服务器端或JavaScript代码设定。
 在客户端第一次向服务器端发起请求之前,客户端是不会有Cookie值的。
 当客户端的请求到达服务器端后,服务器端可以将Cookie值写在响应头中并返回给客户端,
 或者客户端工具(如浏览器)在渲染页面时,由页面中的JavaScript代码生成Cookie值。
 服务器生成Cookie值并将其添加到响应头中返回给浏览器,
 浏览器检测到响应头中的Set-Cookie头域后将对应的Cookie值保存起来,
 而后每一次请求都会自动携带对应的Cookie,除非Cookie过期或者被清除。