selenium操作谷歌翻译遇到的问题,求大佬看一下
本帖最后由 Fc丶风采 于 2021-7-2 00:36 编辑我想做一个输入一段英语短文后selenium自动操作去翻译德国·法国·意大利·西班牙并且把翻译结果保存在变量里面,
每个国家共翻译两篇英语短文,我的思路是让他点击德国后把翻译的结果保存到变量里面,然后拿这个变量去和英语(这里的英语指上一个国家的语言)
比较,如果不等于true那么就保存,如果等于英语的话那就再循环一遍,那我就说说现在碰见的问题,就是德语法语意大利语和西班牙语
保存到变量里面后得到的只是一句话,很小的几率会采集成功,采集到完整翻译的一段话保存到变量里面,我一开始怀疑是脚本执行的太快了,于是我添加了sleep()去多等待几秒还是会出现这样的bug,
实在是无解了不知道怎么解决这个bug,求大神们帮忙看看{:1_889:}
要运行这个脚本的话需要在cmd执行pip install pyperclip| pip install selenium这两个命令安装插件后才能运行,谷歌浏览器驱动需要放在C盘根目录,或者你可以手动改一下,这个脚本我是边学边做的,实在是不知道怎么解决这个bug了
大家可以看一下下面的两个截图,输入y后打印出英国语言的两段短文这是正常的,输入f(法国)输入d(德国)打出出来的只是两段句子,采集的的根本不全,可能我表达的不是很清楚,大家可以运行试一下
from selenium import webdriver
wd=webdriver.Chrome(r'C:\chromedriver.exe')
wd.get('https://translate.google.cn/?sl=auto&tl=en&op=translate')
wd.implicitly_wait(9999999)
#import time
from time import sleep
import time
zanting=input('输入任意敲回车采集描述')
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
#保存描述
ygms=fi.text#保存英国描述
print('英国描述已采集')
an=wd.find_element_by_css_selector('')
an.click()#点击切换语言按钮
#time.sleep(5)
#an=wd.find_element_by_class_name('NMm5M')
#an.click()
#yu=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
#yu.click()
#切换英语
sleep(0.5)
dy=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div')
#切换德语
sleep(0.5)
dy.click()
sleep(0.5)
c_s=1
while True:
sleep(1)
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
dgms=fi.text
#保存德国描述
if dgms!=ygms:
print('德国描述已采集')
break#如果保存的德国描述和英国不一致判断保存成功则退出循环
else:
print('德国描述第',c_s,'次未收集到')
c_s+=1
#通过 CSS Selector 选择单个元素的方法是
#find_element_by_css_selector(CSS Selector参数)
sleep(0.5)
an.click()
fy=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
#切换法语
sleep(0.5)
fy.click()
#fy.click()
sleep(0.5)
c_s=1
while True:
sleep(1)
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
fgms=fi.text#保存法国翻译
if fgms!=dgms:
print('法国描述已采集')
break#如果法国翻译不等于德国翻译则跳出循环
else:
print('法国描述第',c_s,'次未收集到')
c_s+=1
#//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span
sleep(0.5)
an.click()
idly=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
#切换意大利语
sleep(0.5)
idly.click()
sleep(0.5)
c_s=1
while True:
sleep(1)
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
idlms=fi.text
if idlms!=fgms:
print('意大利描述已采集')
break
else:
print('意大利描述第',c_s,'次未收集到')
c_s+=1
sleep(0.5)
an.click()
xbyy=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
#切换西班牙语
sleep(0.5)
xbyy.click()
sleep(0.5)
c_s=1
while True:
sleep(1)
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
xbyms=fi.text
if xbyms!=idlms:
print('西班牙描述已采集')
break
else:
print('西班牙描述第',c_s,'次未收集到')
c_s+=1
#print(ygms,dgms,fgms,idlms,xbyms,sep='\n')
print('描述采集完毕')
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
sleep(0.5)
an.click()
yu=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
sleep(0.5)
yu.click()
#切换英语
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
sleep(0.2)
qingchujian=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/span/span/div/textarea')
#清除键
sleep(0.1)
qingchujian.clear()
#清空描述,方便你接下来输入卖点
#===================================================================================================================================================================
#采集卖点
zanting=input('输入任意敲回车采集卖点')
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
#保存描述
ygmd=fi.text#保存英国描述
print('英国卖点已采集')
an=wd.find_element_by_css_selector('')
an.click()#点击切换语言按钮
#time.sleep(5)
#an=wd.find_element_by_class_name('NMm5M')
#an.click()
#yu=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
#yu.click()
#切换英语
sleep(0.5)
dy=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div')
#切换德语
sleep(0.5)
dy.click()
sleep(0.5)
c_s=1
while True:
sleep(1)
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
dgmd=fi.text
#保存德国描述
if dgmd!=ygmd:
print('德国卖点已采集')
break#如果保存的德国描述和英国不一致判断保存成功则退出循环
else:
print('德国卖点第',c_s,'次未收集到')
c_s+=1
#通过 CSS Selector 选择单个元素的方法是
#find_element_by_css_selector(CSS Selector参数)
an.click()
sleep(0.5)
fy=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
#切换法语
sleep(0.5)
fy.click()
#fy.click()
sleep(0.5)
c_s=1
while True:
sleep(1)
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
fgmd=fi.text#保存法国翻译
if fgmd!=dgmd:
print('法国卖点已采集')
break#如果法国翻译不等于德国翻译则跳出循环
else:
print('法国卖点第',c_s,'次未收集到')
c_s+=1
#//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span
an.click()
sleep(0.5)
idly=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
#切换意大利语
sleep(0.5)
idly.click()
sleep(0.5)
c_s=1
while True:
sleep(1)
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
idlmd=fi.text
if idlmd!=fgmd:
print('意大利卖点已采集')
break
else:
print('意大利卖点第',c_s,'次未收集到')
c_s+=1
an.click()
sleep(0.5)
xbyy=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/c-wiz/div/div/div/div/div/div/div')
#切换西班牙语
sleep(0.5)
xbyy.click()
sleep(0.5)
c_s=1
while True:
sleep(1)
wd.execute_script('window.scrollTo(0,0)')
#回到网页顶部
fi=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div/c-wiz/div/c-wiz/div/div/div/c-wiz/div/div/div/span/span/span')
xbymd=fi.text
if xbymd!=idlmd:
print('西班牙卖点已采集')
break
else:
print('西班牙卖点第',c_s,'次未收集到')
c_s+=1
print('卖点采集完毕')
#======================================================================================================================================================
#print(ygms,dgms,fgms,idlms,xbyms,sep='\n')
#print(ygmd,dgmd,fgmd,idlmd,xbymd,sep='\n')
while True:
hmd=input('输入')
if hmd=='y':
print(ygms,'分隔',ygmd,sep='\n')
elif hmd=='d':
print(dgms,'分隔',dgmd,sep='\n')
elif hmd=='f':
print(fgms,'分隔',fgmd,sep='\n')
elif hmd=='i':
print(idlms,'分隔',idlmd,sep='\n')
elif hmd=='x':
print(xbyms,'分隔',xbymd,sep='\n') Fc丶风采 发表于 2021-7-2 13:51
翻译后网页的结果是一大段,但获取到的只有一句,偶尔会获取到完整的翻译结果
你这个应该是定位获取的问题 比如翻译返回的就是一段一段的 所以你要输出一下翻译后的完整的html 看下。 是人工智能相关的? stardxxx 发表于 2021-7-2 01:09
是人工智能相关的?
不是,就是把英语短文(1000字左右)翻译成其他国家语言保存在变量里 Fc丶风采 发表于 2021-7-2 01:15
不是,就是把英语短文(1000字左右)翻译成其他国家语言保存在变量里
嗯嗯,我是说看着你这个处理过程,有点像训练过程 pip install google-trans-new tywolf 发表于 2021-7-2 03:09
pip install google-trans-new
老哥,我的翻译量很大,用接口的话可能被谷歌封ip Fc丶风采 发表于 2021-7-2 07:10
老哥,我的翻译量很大,用接口的话可能被谷歌封ip
用代{过}{滤}理啊 Fc丶风采 发表于 2021-7-2 07:10
老哥,我的翻译量很大,用接口的话可能被谷歌封ip
我看你这个好像也是通一个出口IP 的吧。。。。短时间内有大量的模拟操作,应该也会被封吧 本帖最后由 Hangjau 于 2021-7-2 10:17 编辑
我缕了下你的需求, 就是传入英语短文,然后翻译成其他国家语言。然后把输入的与翻译后的进行对比。如果不一致就是保存下来。如果一致就再执行一次。 目前的问题就是翻译后的数据只获取到了一部分不知道是不是这样。是这样的话 可以检查下翻译后的输出是否是完整的。另外为啥不用接口模拟 加个伪装。另外你这个代码看着好头疼 重复操作。直接把变的地方做变量传进去做循环。可读性要高一些。另外调试的时候 在翻译后selenium 直接暂停 你看下网页上的是否是正常的。如果是就是的元素提取有问题
页:
[1]
2