我正在研究机器人.我希望机器人每50次搜索更改webdriver的代理.我有一个请求代理和套接字的API,我存储这些变量,到目前为止我一直在使用firefox配置文件进行设置,但这并不能很好地工作.
因此,鉴于我已经有了一个可行的代理和端口来源,你能告诉我任何方式我可以更改代理而不会崩溃webdriver并在单个会话上执行吗?
以前的尝试:
我尝试以这种方式设置firefox配置文件:
regions = {
'US': '', #USA is the default server
'Australia': #json response through the api,
'Canada': #json response through the api,
'France': #json response through the api,
'Germany': #json response through the api,
'UK': #json request response the api
}
for region in regions:
fp = webdriver.FirefoxProfile()
if(regions[region] != ''):
fp.set_preference("network.proxy.type", 1)
fp.set_preference("network.proxy.socks", regions[region])
fp.set_preference("network.proxy.socks_port", port)
Run Code Online (Sandbox Code Playgroud)
这给我带来了一些问题,每次我想交换代理时我都要开始新的会话.所以我试图通过Firefox选项(选项 - 一般 - 连接设置)更改代理,但结果是单击连接设置按钮后无法通过selenium或javascript(xul文件)访问屏幕上显示的弹出窗口.
我正在构建一个搜索机器人,我希望它从桌面更改为移动
我尝试使用 profile.set_preferences 但由于某种原因它不会改变。它不会给出编译时错误,但不会更改用户代理。我还尝试设置所需的功能,但这也不起作用。
if count == 0:
browser = webdriver.Firefox(executable_path="geckodriver.exe")
else:
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0")
browser = webdriver.Firefox(profile)
Run Code Online (Sandbox Code Playgroud)
我希望它作为常规浏览器搜索一次,然后作为移动设备搜索,但它只是作为常规浏览器搜索两次,我确信我会增加计数。
我正在使用 selenium 的 driver.execute_script 函数在页面上部署一些 JavaScript。
我准备了 JavaScript,但如果我将代码放入另一行,如下所示:
script = 'line one code' +
'line two code'
driver.execute_script(script)
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误。我也尝试过这样做:
script = [
'line one code',
'line two code'
]
script = ';'.join(script)
Run Code Online (Sandbox Code Playgroud)
但这给了我同样的错误。
我正在学习Redux。我有点新,所以我不想在一开始就养成不良习惯,这就是为什么我要写这个。
我正在阅读的文档说,在化简器中,我们需要始终设置要更改它的状态-换句话说,请执行以下操作:
const someReducer = (state=initState, {type, payload}) => {
switch(type) {
case 'CHANGE_VALUE_ONE' : {
state = {...state, valueOne: payload }
break
}
case 'CHANGE_VALUE_TWO' : {
state = {...state, valueTwo: payload }
break
}
default:
state = state
}
return state
}
Run Code Online (Sandbox Code Playgroud)
我的方法是创建一个newState常量,该常量与我们收到的状态相同,对虚拟对象进行更改并返回它-或在代码中:
const userReducer = (state= {name: null, age: null}, {type, payload}) => {
const newState = {...state}
switch(type) {
case 'CHANGE_VALUE_ONE' : {
newState.valueOne= payload
break
}
case 'CHANGE_VALUE_TWO' : {
newState.valueTwo= payload
break
}
} …Run Code Online (Sandbox Code Playgroud) if preset.exists('//*[@id="i0116"]', '10', '1'):
if (log.enter_username()):
if preset.exists('//*[@id="i0116"]', '10', '1'):
if (log.enter_password()):
locked = unlock(details[0], details[1], browser, ' ', ' ', ' ')
if not (locked.checkBlocked()):
# unlock account
else:
searches = search(details[0], details[1], browser)
else:
browser.quit()
continue
else:
browser.quit()
continue
else:
browser.quit()
continue
else:
browser.quit()
continue
Run Code Online (Sandbox Code Playgroud)
我正在使用Python制作一个机器人,我有很多异常处理要做到这一点,我可能最终会有至少5个以上的这些,如果是的话,其他的......
我在这里做错了吗?我应该在方法本身内部硬编码这些异常,而不是使用控制文件来执行此操作吗?
我正在尝试使用轮廓制作一个对象检测工具(给定示例)。
我已经取得了一些进展,但是当对象位于另一个具有复杂结构的对象(例如手或脸)前面时,或者对象及其背景颜色合并时,它会停止检测边缘,因此不会给出良好的效果轮廓。
在阅读了算法文档后,我发现它的工作原理是通过颜色强度的差异来检测边缘 - 例如,如果物体是黑色而背景是黑色,则它不会检测到它。
所以现在我正在尝试应用一些效果和模糊来尝试使其发挥作用。
我目前正在尝试获得组合的索贝尔模糊(在两个轴上),希望在足够的光线下它能够定义边缘 - 因为该产品将由带有闪光灯的手机使用。
所以当我尝试这样做时:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frame = cv2.GaussianBlur(frame, (5, 5), 10)
frameX = cv2.Sobel(frame, cv2.CV_64F, 1, 0)
frameY = cv2.Sobel(frame, cv2.CV_64F, 0, 1)
frame = cv2.bitwise_or(frameX, frameY)
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,指出当模式不是 时,cv2.findContours仅支持图像。CV_8UC1CV_RETR_FLOODFILL
这是触发错误的行:
counturs, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
Run Code Online (Sandbox Code Playgroud)
我一周前才开始摆弄这个东西,我很惊讶得到结果是多么容易,但有些错误消息很荒谬。
编辑:我确实尝试将模式交换为,CV_RETR_FLOODFILL但这并没有解决问题,然后它根本不起作用。
python ×5
selenium ×3
firefox ×2
code-design ×1
geckodriver ×1
if-statement ×1
opencv ×1
proxy ×1
react-redux ×1
reactjs ×1
redux ×1
sobel ×1
user-agent ×1