是否可以通过元素的部分值通过selenium单击onclick元素?
页面上有多个输入项,我只需要选择一个具有特定字符串的项.
例子是:
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','1BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','1 Bedroom Deluxe','false','AC')">
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','2BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','2 Bedroom Deluxe','false','AC')">
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','1BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','1 Bedroom Presidential','false','AC')">
Run Code Online (Sandbox Code Playgroud)
如果您注意到最后,有"一卧室豪华","两卧室豪华"和"一卧室总统".由于它是一个输入项,因此我没有任何文本可以过滤,但我只需要选择一个特定的项目,例如2卧室豪华版.
在以下意义上我能做些什么:
buttons = driver.find_elements_by_name('booksubmit')
for button in buttons:
if button ........
Run Code Online (Sandbox Code Playgroud)
什么或另一个?我目前正在使用beautifulsoup4来解析页面上的html并检索与该项目相关联的文本,因此我不知道是否可以合并.从视觉上看,该页面是一个HTML表格,格式为:
+--------------------------------------------------------------------+
| 1 Bedroom Deluxe | $25 | [button i don't care about] |
|------------------------+---------+---------------------------------|
| 2 Bedroom Deluxe | $50 | [button i'm trying to click] |
|------------------------+---------+---------------------------------|
| 1 Bedroom Presidential | $50 …Run Code Online (Sandbox Code Playgroud) 我出于某种原因似乎无法连接到我们网络之外的任何SQL Server,但如果我通过VPN在网络中,则没有问题.我的代码就像本地连接一样:
sql = pyodbc.connect(
'DRIVER={FreeTDS};'
'SERVER=192.168.1.xx\ROA;'
'DATABASE=RentalDB;'
'UID=xxxxxxx;'
'PWD=xxxxxxx'
)
Run Code Online (Sandbox Code Playgroud)
以下是我正在尝试远程的:
sql = pyodbc.connect(
'DRIVER={FreeTDS};'
'SERVER=69.178.xx.xx/ROA;'
'DATABASE=RentalDB;'
'UID=xxxxxxxx;'
'PWD=xxxxxxxx'
)
Run Code Online (Sandbox Code Playgroud)
尝试连接时,大约15秒左右后抛出以下错误:
pyodbc.Error:('08001','[08001] [unixODBC] [FreeTDS] [SQL Server]无法连接到数据源(0)(SQLDriverConnect)')
我能够成功地通过SQL Server Management Studio中连接的,我们有一个有建立一个连接没有问题,C#开发人员,但由于某些原因,我不能.我正在运行Python 2.7,Debian 7,FreeTDS 0.91和PYODBC 3.0.7.我认为SQL Server版本是2012.有任何想法吗?
编辑:在远程连接上,我已尝试以下'SERVER ='字符串:
69.178.xx.xx/ROA
69.178.xx.xx\ROA
mssql://69.178.xx.xx/ROA
mssql://69.178.xx.xx\ROA
69.178.xx.xx:1433/ROA
69.178.xx.xx:1433\ROA
mssql://69.178.xx.xx:1433/ROA
mssql://69.178.xx.xx:1433\ROA
Run Code Online (Sandbox Code Playgroud)
并且所有这些都返回相同的错误.
编辑2:修正了上面的东西的端口号.
我很遗憾无法发布代码来重现此问题,因为它涉及登录到不是公共站点的站点.但我的问题比代码问题更普遍.实质上,driver.page_source与它正在驱动的浏览器中显示的内容不匹配.这不是一个没有完全加载的元素的问题,因为我在python终端中逐行执行代码时测试它.右键单击并转到"查看页面源"后,我在浏览器中查看页面源,但是如果我打印driver.page_source或尝试find_element_by_[...],它会显示略有不同的代码,缺少整个元素.这是有问题的HTML:
<nav role="navigation" class="utility-nav__wrapper--right">
<input id="hdn_partyId" value="1965629" type="hidden">
<input id="hdn_firstName" value="CHARLES" type="hidden">
<input id="hdn_sessionId" value="uHxQhlARvzA7N16uh+KJAdNFIcY6D8f9ornqoPQ" type="hidden">
<input id="hdn_cmsAlertRequest" type="hidden" value="Biennial Plus">
<ul class="h-list h-list--middle">
[...]
</ul>
Run Code Online (Sandbox Code Playgroud)
然而,我需要所有4个输入元素,hdn_partyId并且hdn_sessionId元素不会出现在selenium中.page_source,如果我尝试使用它们,.find_element_by_[...]我会得到一个NoSuchElementException
我甚至检查了所有input元素并列出它们,并且这两个元素都没有显示出来.
有没有人知道为什么selenium不会提供与直接查看它正在驱动的浏览器相同的内容?
编辑:澄清......我正在通过Selenium驾驶Chrome与Chromedriver.这不是页面未完全加载的问题.正如我所提到的,我通过python终端逐行手动运行,而不是执行脚本.所以浏览器弹出,加载页面,登录,然后我手动检查浏览器的页面源并看到元素,然后我print driver.page_source和它不在那里,如果我运行session_id = driver.find_element_by_id('hdn_sessionId')我得到一个NoSuchElementException.页面中根本没有框架,也没有任何其他窗口.
我对使用python(使用python 2.7)解析JSON数据有些新意.有一项服务我必须发送API调用,而JSON响应就像我在下面所做的那样."行"中的项目数量可能会有所不同.我需要做的是只从第二行获取"内容",如果有第二行,则将其放入列表中.从本质上讲,它只是"广告系列确认号码"的列表,而不是其他任何内容.如果有帮助的话,这个数字也总是只有9个数字.任何建议将非常感谢.
{"response":
{"result":
{"Potentials":
{"row":
[
{"no":"1","FL":
{"content":"523836000004148171","val":"POTENTIALID"}
},
{"no":"2","FL":
{"content":"523836000004924051","val":"POTENTIALID"}
},
{"no":"3","FL":
[
{"content":"523836000005318448","val":"POTENTIALID"},
{"content":"694275295","val":"Campaign Confirmation Number"}
]
},
{"no":"4","FL":
[
{"content":"523836000005318662","val":"POTENTIALID"},
{"content":"729545274","val":"Campaign Confirmation Number"}
]
},
{"no":"5","FL":
[
{"content":"523836000005318663","val":"POTENTIALID"},
{"content":"903187021","val":"Campaign Confirmation Number"}
]
},
{"no":"6","FL":
{"content":"523836000005322387","val":"POTENTIALID"}
},
{"no":"7","FL":
[
{"content":"523836000005332558","val":"POTENTIALID"},
{"content":"729416761","val":"Campaign Confirmation Number"}
]
}
]
}
},
"uri":"/crm/private/json/Potentials/getSearchRecords"}
}
Run Code Online (Sandbox Code Playgroud)
编辑:此示例的输出示例如下:
confs = [694275295,729545274,903187021,729416761]
要么
confs = ['694275295','729545274','903187021','729416761']
它们存储为字符串或整数并不重要
编辑2:这是我的代码片段:
import urllib
import urllib2
import datetime
import json
key = '[removed]'
params = {
'[removed]'
}
final_URL …Run Code Online (Sandbox Code Playgroud) 我试图用 BeautifulSoup4 和 Python 2.7.6 解析一些 html,但字符串返回“None”。我试图解析的 HTML 是:
<div class="booker-booking">
2 rooms
·
USD 0
<!-- Commission: USD -->
</div>
Run Code Online (Sandbox Code Playgroud)
我的Python片段是:
data = soup.find('div', class_='booker-booking').string
Run Code Online (Sandbox Code Playgroud)
我还尝试过以下两种:
data = soup.find('div', class_='booker-booking').text
data = soup.find('div', class_='booker-booking').contents[0]
Run Code Online (Sandbox Code Playgroud)
两者都返回:
u'\n\t\t2\xa0rooms \n\t\t\xb7\n\t\tUSD\xa00\n\t\t\n
Run Code Online (Sandbox Code Playgroud)
我最终试图将第一行放入一个仅表示“2 Rooms”的变量中,将第三行放入另一个仅表示“USD 0”的变量中。
python ×5
parsing ×2
selenium ×2
freetds ×1
html-parsing ×1
javascript ×1
json ×1
list ×1
pyodbc ×1
sql ×1
sql-server ×1