自己记下。
这个Web页面中利用input type=“hidden” 向服务器上传 value 值(比如=“1H"),在页面是不可见的。Python selenium虽然可以定位,但改不了value值。而显示在屏幕上的 input type=“text” name=“occupation_disp” 确定的value仅用于显示(readonly=“readonly”,用户无法输入),它通过JS调用 从一个“单选”按钮选择职业信息(中文名称)会给到name="occupation_disp"的value值 ,然后把中文名称的职业信息对应的编号传给name="occupation"的input value值,并向服务器提交。
明白了这个道理:就有办法解决了。
核心代码如下:
for k,va in gl_pers_dic.items():
epos=gl_col_dict[k]+str(i) #取出 "M1"等excel文档的列元素位置
fval=ws[epos].value #取出对 应的值,如M1=“居民身份证或临时身份证”
if (len(str(fval))>0) and ( fval is not None): #不是空或者None
if 'select' in va : # select 定位 xpath表示法://select[@name='citp']
wpos=Select(browser.find_element_by_xpath(va)) # 下拉框操作
wpos.select_by_visible_text(fval) #写入数据
else: # input 定位
inpu_xpos=browser.find_element_by_xpath(va)
if k in ("职业"): #2019-08-28职业信息改成只读了,表示成20000-专业技术人员
key_val=fval.split('-')[0] #key_val='20000'
fval=fval.split('-')[1] #fval="20000-专业技术人员"
jss="document.getElementsByName('occupation')[0].value='"+key_val+"'"
browser.execute_script(jss)
browser.execute_script("arguments[0].removeAttribute('readOnly')",inpu_xpos)
inpu_xpos.clear() #清理原页面输入框中的数据
inpu_xpos.send_keys(fval) #把个人web新值写入
核心:原生Js是Python Selenium支持的。我这儿是name定位,常见的都是ID定位,所以要根据自己碰到 HTML代码改。
jss=“document.getElementsByName(‘occupation’)[0].value=’”+key_val+"’"