trg = driver.find_element_by_xpath(’//*[@id=“jb”]/div[2]’)
上句中的XPATH语句是从chrome的F12中直接右键目标得到的。以后可以作为参考样例。
ele = WebDriverWait(driver,20,0.2).until(ec.text_to_be_present_in_element((By.XPATH,"//td[@class=‘t1’]"),u’字典搜索’))
这个语句能正常工作,然而屏蔽掉它程序依然可以正常操作,真的需要吗?等报错再用吧。
st = strs.splitlines() 这个语句是split()函数的多行版,很好用哦!可以自动将内嵌多行的string分解成列表。
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait #非无头设置的必须
from selenium.webdriver.common.by import By #非无头设置的必须
op = webdriver.FirefoxOptions()
op.add_argument("–headless") #等效于 ———— op.set_headless()
op.add_argument("–disable-gpu") #禁用GPU加速
driver = webdriver.Firefox(firefox_options = op)
driver.get(address)
以上是火狐无头浏览器设置。
要记得火狐的无头浏览器名称是:geckodriver.exe 一定要记得下载合适的版本并将其放置在:C:\Users\mlong\AppData\Local\Programs\Python\Python37\Scripts文件夹下(随个人设置而不同)。
import time
start = time.clock()
end = time.clock()
print(end-start)
以上可以用来测试程序某段的运行时间。time.time()也可以。
with open(“cww.txt”,“a”,encoding=“utf-8”) as f:
以上用来打开文件不需要最后调用close()函数。优先使用。
模式 可做操作 若文件不存在 是否覆盖
r 只能读 报错 -
r+ 可读可写 报错 是
w 只能写 创建 是
w+ 可读可写 创建 是
a 只能写 创建 否,追加写
a+ 可读可写 创建 否,追加写
str.replace(‘~’,strs) 用前面的参数替换后面的字符串里面的所有字符。
string.punctuation 是python内置的标点符号的合集
t = t.translate(str.maketrans(’’,’’,‘s’))查找并干掉字符串t里面的所有指定字符s
if re.match(r"[\u4e00-\u9fa5]",strs): 如果strs是汉字字符那么。。。。。。
handles = driver.window_handles
for t in handles:
print(t)
以上获取全部窗口句柄
driver.execute_script(‘arguments[0].scrollIntoView();’,trg)
以上将选定的元素(trg)定位到屏幕中间。
以百库文库为例(https://wenku.baidu.com/view/217d303c76eeaeaad0f33075.html),较大的文档的展示一般是通过分页展示,并且每一页的内容不会全部加载,要在浏览到当前页才会加载当前几页的内容。像这个文档,一次显示五十页,但是只会加载当前浏览进度处的三叶内容。因此要自动抓取这个内容需要实现滚动功能。
selenium有两种滚动方式:
第一种,滚动到特定位置“:
driver.execute_script(‘var q=document.body.scrollTop=3500’) 滚动到页面的3500像素处(从上往下)(通过网页审查可以看到整个网页的像素大小) 第二种,以当前位置为参照,滚动一定距离: driver.execute_script(‘window.scrollBy(0, 1000)’) 从当前位置向下滚动1000像素。第三种,定位到特定的元素:element = driver.find_element_by_xpath("//span[@class=‘fc2e’]") 先找到特定的web元素(与beautifulsoup中的元素概念不同)。driver.execute_script(‘arguments[0].scrollIntoView();’,element) 把特定的元素滚动到页面的顶部/底部,但不一定能被点击到。实现点击: element.click()值得注意的是:目标元素经常会被一些内容遮挡,另外注意设置等待时间。网页的解析还是使用beautifulsoup:html = driver.page_source bf1 = BeautifulSoup(html, ‘lxml’) result = bf1.find_all(class_=‘ie-fix’) for each_result in result: for singlecell in each_result.find_all(‘p’): if ‘left:907px’ in str(singlecell[‘style’]): f.write(’/n’) f.write(singlecell.string+’#’)
11.1.使用JavaScript操作页面元素
#构造JavaScript查找百度首页的搜索输入框的代码字符串: searchImputBoxJS = “document.getElementById(‘kw’).value = ‘你的意义’;”
#构造JavaScript查找百度首页的搜索按钮代码字符串:searchButtonJS = “document.getElementById(‘su’).click()”
11.2.操作Web页面的滚动条
#使用javaScript的scrollTo函数和document.body.scrollHeight参数
#将页面的滚动条滑动到页面的最下方:self.driver.execute_script(“window.scrollTo(100, document.body.scrollHeight);”)
#使用JavaScript的scrollIntoView函数将被遮挡的元素滚动到可见屏幕上
#scrollIntView(true)表示将元素滚动屏幕中间
#scrollView(false)表示将元素滚动到屏幕底部
self.driver.execute_script(“document.getElementById(‘choice’).scrollIntoView(true);”)
#使用JavaScript的scrollBy方法,使用0和400横纵坐标参数
当用以下语句读TXT文件时会遇到首字是预期之外的’\ufeff’时候…
with open(‘linshiaaa.txt’,‘r’,encoding=“UTF-8”) as f:
解决方法很简单,只要把字符编码改成这样:
encoding = “UTF-8-sig”
tdict[tx[i].split(’,’)[0]] = tx[i].split(’,’)[1][:-1]
嗯,这玩意就是用的split将字符串有序分割成为字典的。
'''if __name__ == '__main__'的意思是:当.py文件被直接运行时,
if __name__ == '__main__'之下的代码块将被运行;
当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。'''
import os
import sys
def restart_program():
python = sys.executable
os.execl(python, python, * sys.argv)
day = re.sub('[^\w\u4e00-\u9fff]+', "", time.strftime("%F"))