吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1981|回复: 18
收起左侧

[求助] selenium操作谷歌翻译遇到的问题,求大佬看一下

[复制链接]
Fc丶风采 发表于 2021-7-2 00:30
50吾爱币
本帖最后由 Fc丶风采 于 2021-7-2 00:36 编辑

我想做一个输入一段英语短文后selenium自动操作去翻译德国·法国·意大利·西班牙并且把翻译结果保存在变量里面,
每个国家共翻译两篇英语短文,我的思路是让他点击德国后把翻译的结果保存到变量里面,然后拿这个变量去和英语(这里的英语指上一个国家的语言)
比较,如果不等于true那么就保存,如果等于英语的话那就再循环一遍,那我就说说现在碰见的问题,就是德语法语意大利语和西班牙语
保存到变量里面后得到的只是一句话,很小的几率会采集成功,采集到完整翻译的一段话保存到变量里面,我一开始怀疑是脚本执行的太快了,于是我添加了sleep()去多等待几秒还是会出现这样的bug,
实在是无解了不知道怎么解决这个bug,求大神们帮忙看看
要运行这个脚本的话需要在cmd执行pip install pyperclip  | pip install selenium这两个命令安装插件后才能运行,谷歌浏览器驱动需要放在C盘根目录,或者你可以手动改一下,这个脚本我是边学边做的,实在是不知道怎么解决这个bug了
大家可以看一下下面的两个截图,输入y后打印出英国语言的两段短文这是正常的,输入f(法国)输入d(德国)打出出来的只是两段句子,采集的的根本不全,可能我表达的不是很清楚,大家可以运行试一下





[Python] 纯文本查看 复制代码
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/span/span')
#保存描述
ygms=fi.text#保存英国描述
print('英国描述已采集')

an=wd.find_element_by_css_selector('[aria-label="更多目标语言"]')

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[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[106]/div[2]')
#yu.click()
#切换英语

sleep(0.5)
dy=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[19]')
#切换德语
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/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[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[21]/div[2]')
#切换法语
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/span/span')
        fgms=fi.text#保存法国翻译
        if fgms!=dgms:
                print('法国描述已采集')
                break#如果法国翻译不等于德国翻译则跳出循环
        else:
                print('法国描述第',c_s,'次未收集到')
                c_s+=1

#//*[@id="yDmH0d"]/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/span/span
sleep(0.5)
an.click()
idly=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[100]/div[2]')
#切换意大利语
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/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[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[91]/div[2]')
#切换西班牙语
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/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[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[106]/div[2]')
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[1]/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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/span/span')
#保存描述
ygmd=fi.text#保存英国描述
print('英国卖点已采集')

an=wd.find_element_by_css_selector('[aria-label="更多目标语言"]')

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[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[106]/div[2]')
#yu.click()
#切换英语

sleep(0.5)
dy=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[19]')
#切换德语
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/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[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[21]/div[2]')
#切换法语
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/span/span')
        fgmd=fi.text#保存法国翻译
        if fgmd!=dgmd:
                print('法国卖点已采集')
                break#如果法国翻译不等于德国翻译则跳出循环
        else:
                print('法国卖点第',c_s,'次未收集到')
                c_s+=1

#//*[@id="yDmH0d"]/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/span/span

an.click()
sleep(0.5)
idly=wd.find_element_by_xpath('//*[@id="yDmH0d"]/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[100]/div[2]')
#切换意大利语
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/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[2]/c-wiz/div[2]/c-wiz/div[3]/c-wiz/div[2]/div/div[3]/div/div[2]/div[91]/div[2]')
#切换西班牙语
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[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[2]/c-wiz[2]/div[5]/div/div[1]/span[1]/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')

这个是英语的,英语采集到的就很全面,上下两篇英语短文

这个是英语的,英语采集到的就很全面,上下两篇英语短文

采集到的德语法语意大利语都只是一句话,采集的不全

采集到的德语法语意大利语都只是一句话,采集的不全

最佳答案

查看完整内容

你这个应该是定位获取的问题 比如翻译返回的就是一段一段的 所以你要输出一下翻译后的完整的html 看下。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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 直接暂停 你看下网页上的是否是正常的。如果是就是的元素提取有问题
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表