Fc丶风采 发表于 2021-7-2 00:30

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')

Hangjau 发表于 2021-7-2 00:30

Fc丶风采 发表于 2021-7-2 13:51
翻译后网页的结果是一大段,但获取到的只有一句,偶尔会获取到完整的翻译结果
你这个应该是定位获取的问题 比如翻译返回的就是一段一段的 所以你要输出一下翻译后的完整的html 看下。

stardxxx 发表于 2021-7-2 01:09

是人工智能相关的?

Fc丶风采 发表于 2021-7-2 01:15

stardxxx 发表于 2021-7-2 01:09
是人工智能相关的?

不是,就是把英语短文(1000字左右)翻译成其他国家语言保存在变量里

stardxxx 发表于 2021-7-2 01:35

Fc丶风采 发表于 2021-7-2 01:15
不是,就是把英语短文(1000字左右)翻译成其他国家语言保存在变量里

嗯嗯,我是说看着你这个处理过程,有点像训练过程

tywolf 发表于 2021-7-2 03:09

pip install google-trans-new

Fc丶风采 发表于 2021-7-2 07:10

tywolf 发表于 2021-7-2 03:09
pip install google-trans-new

老哥,我的翻译量很大,用接口的话可能被谷歌封ip

subney 发表于 2021-7-2 08:20

Fc丶风采 发表于 2021-7-2 07:10
老哥,我的翻译量很大,用接口的话可能被谷歌封ip

用代{过}{滤}理啊

Monklamn 发表于 2021-7-2 09:20

Fc丶风采 发表于 2021-7-2 07:10
老哥,我的翻译量很大,用接口的话可能被谷歌封ip

我看你这个好像也是通一个出口IP 的吧。。。。短时间内有大量的模拟操作,应该也会被封吧

Hangjau 发表于 2021-7-2 10:01

本帖最后由 Hangjau 于 2021-7-2 10:17 编辑

我缕了下你的需求, 就是传入英语短文,然后翻译成其他国家语言。然后把输入的与翻译后的进行对比。如果不一致就是保存下来。如果一致就再执行一次。 目前的问题就是翻译后的数据只获取到了一部分不知道是不是这样。是这样的话 可以检查下翻译后的输出是否是完整的。另外为啥不用接口模拟 加个伪装。另外你这个代码看着好头疼 重复操作。直接把变的地方做变量传进去做循环。可读性要高一些。另外调试的时候 在翻译后selenium 直接暂停 你看下网页上的是否是正常的。如果是就是的元素提取有问题
页: [1] 2
查看完整版本: selenium操作谷歌翻译遇到的问题,求大佬看一下