displayed in chrome but not in page source - rvest

When I click "Show Abstract" icon, I can see an abstract in Chrome. However I cannot find it in a page source.
http://epubs.siam.org/toc/smjmap/38/1
I can have multiple titles without abstract like below.
url <- read_html("http://epubs.siam.org/toc/smjmap/38/1")
title <- url %>%
html_nodes(".art_title") %>%
html_text()
I'd like to use this command. However it's not possible to use it because
I can't see abstracts in page source.
Hence I use:
html=read_html("http://epubs.siam.org/toc/smjmap/38/1")
comment_area = html_nodes(html,".toc" )
comments = html_nodes(comment_area, ".abstractSection")
html_text(comments)
html_text(comments)
[1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
I'd like to obtain all abstracts at one time.
Thank you for your help in advance.

Related

Check if item in split string is empty? [duplicate]

Note. Check if the TextBox1 is empty is easy by using TextBox1.Value = "".
But the problem is when the user hit the spacebar, TextBox1 will still recognize it as a value. In such case, my data will appear as an empty cell with 1 space inside. So my question is, is there any method to check TextBox1.value for empty and also not consist of space whether there are 1 or more space? Million thanks to all.
A common trick is to check like this:
trim(TextBox1.Value & vbnullstring) = vbnullstring
this will work for spaces, empty strings, and genuine null values
Most terse version I can think of
Len(Trim(TextBox1.Value)) = 0
If you need to do this multiple times, wrap it in a function
Public Function HasContent(text_box as Object) as Boolean
HasContent = (Len(Trim(text_box.Value)) > 0)
End Function
Usage
If HasContent(TextBox1) Then
' ...
Here is the code to check whether value is present or not.
If Trim(textbox1.text) <> "" Then
'Your code goes here
Else
'Nothing
End If
I think this will help.
You can use the following code to check if a textbox object is null/empty
'Checks if the box is null
If Me.TextBox & "" <> "" Then
'Enter Code here...
End if

Cycle through a loop in VBA

I have a form in VBA where I want a combo box (cboIncluded) to change its dropdown values according to what's chosen in a different combo box(cboSelectParty).
It provides choices correctly the first time I choose something from cboSelectParty, and if I choose again from either my If or elseif.
My problem is, if I have chosen from either the if or elseif (Fun climb party or climbing party), if won't go back to giving me correct options if I choose anything else.
Private Sub cboSelectParty_AfterUpdate()
cboIncluded.Value = ""
If cboSelectParty.Value = "Fun Climb Party" Then
cboIncluded.List = Sheets("PartyImport").Range("N3:N4").Value
ElseIf cboSelectParty.Value = "Climbing Party" Then
cboIncluded.List = Sheets("PartyImport").Range("O3:O6").Value
Else
cboIncluded.Value = Application.WorksheetFunction.VLookup(cboSelectParty.Value,
Sheets("PartyImport").Range("E2:H37"), 4, False)
End If
End Sub

"Out of memory" error when div class not found

I am using Selenium with ChromeDriver
Dim driver As New ChromeDriver
driver.Get "https://somewebsite.com"
val = driver.FindElementByCss(".some-class-that-does-not-exist-on-this-page").Text
Cells(x, 2).Value = val
When my vba code cannot find that class on a page, it throws an
"out of memory" error 7
even though, my task manager says my memory is only at 29%.
When I click on help it takes me to https://learn.microsoft.com/en-us/office/vba/Language/Reference/User-Interface-Help/out-of-memory-error-7
I have tried things suggested there:
Restart Microsoft Windows in enhanced mode.
Increase virtual memory
But the issue still persists. This only happens when it fails to find the div class.
I tried to add an if statement to check if the element exists
If IsObject(driver.FindElementByCss(".some-class-that-does-not-exist-on-this-page")) Then
val = driver.FindElementByCss(".some-class-that-does-not-exist-on-this-page").Text
Cells(x, 2).Value = val
End If
But still results in out of memory error.
I solved it by using error handler
On Error GoTo ErrorHandler
elem = driver.FindElementByCss(".some-class-that-does-not-exist-on-this-page")
Cells(x, 2).Value = elem.Text
ErrorHandler:
Cells(x, 2).Value = "HTML element not found"
Resume Next
remove the ".Text" part. Check if element exists before reading that value.
pseudo:
elem = driver.FindElementByCss(".some-class-that-does-not-exist-on-this-page")
if elem is not nothing then
val = elem.Text
// do other stuff
end if

Opening a Specific Record in an Access Form From Excel

I'm writing a macro that will open an Access Database, open a form and display a specific record based on the contents of the ActiveCell. I have it mostly working, but the problem I'm having is that it opens a form that only contains the one record, so the arrow buttons at the bottom don't go to other records. Is there a way to open the form with all the records and then move to then one i want to show? I suspect it has to do with the search box at the bottom of the form, but I can't find any info about it on the internet.
Form opened by Macro:
Form opened manually:
Sub File_open()
Dim app as Object
Dim search As String: search = ActiveCell.Value
If (ActiveCell.Font.ColorIndex = 3) And (InStr(ActiveCell.Value, "-") <> 0) Then
'Open NCR Record
Set app = CreateObject("Access.Application")
app.Visible = True
app.OpenCurrentDatabase ("Z:\Quality\NCR Database\NCR Databse " & "20" & Left(ActiveCell.Value, 2) & "0101.accdb")
app.DoCmd.OpenForm "Issue Details", , , "[ID]=" & Abs(Replace(Right(search, 4), "-", ""))
Set app = Nothing
Exit Sub
End If
Msbox ("NCR Not Found.")
End Sub
UPDATE:
I've noticed that users of this database have been sloppy and the [ID] of the records don't line up with the number I get from my Abs(Replace(Right(search, 4), "-", "")) expression. I want to look at a textbox named [Title] whose control source is a field called [NCR Number] and use the search variable as is to find the record. I changed my code and now I just get a input box that is completely baffling to me:
app.DoCmd.OpenForm "Issue Details", WhereCondition:="[Title]=" & search
You're showing the form with DoCmd.OpenForm:
expression.OpenForm (FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)
For FormName you're passing "Issue Details", skipping View and FilterName parameters, and then you provide a WhereCondition argument:
app.DoCmd.OpenForm "Issue Details", , , "[ID]=" & Abs(Replace(Right(search, 4), "-", ""))
That "[ID]=" & Abs(Replace(Right(search, 4), "-", "")) expression is the filter you're seeing.
Remove that argument, you'll remove the filter.
app.DoCmd.OpenForm "Issue Details"
Side note, don't skip optional positional arguments like that (, , ,) - consider using named arguments instead, it makes it much clearer what arguments go to what parameters:
Now you need to move the recordsets cursor to your wanted position (can be provided by.OpenArgs):
app.DoCmd.OpenForm "Issue Details", _
OpenArgs:="[ID]=" & Abs(Replace(Right(search, 4), "-", ""))
'below could be in the form itself, e-g- Form_Load, (then ref by Me)
With Forms("Issue Details").RecordsetClone
.FindFirst Forms("Issue Details").OpenArgs
If .NoMatch then
' reaction on id not found
Else
Forms("Issue Details").Bookmark = .Bookmark
End If
End With

Autoit controls

I use ControlSend() to send hotkeys in a different window. Problem is to find the right window control. Or the control is right and there is an unknown issue. These are the controls:
Title: PokeMMO
Class: LWJGL
controlID: still unknown
Process: javaw.exe
$handle = WinGetHandle("[TITLE:PokeMMO; CLASS:LWJGL]")
ControlSend($handle, Default, $handle, "{Down}")
Didn't work.
Global $sProcess = "javaw.exe" ; Process PokeMMO
ControlSend(_Process2Win($sProcess), "", "", "{DOWN}")
Func _Process2Win($pid)
If IsString($pid) Then $pid = ProcessExists($pid)
If $pid = 0 Then Return -1
$list = WinList()
For $i = 1 To $list[0][0]
If $list[$i][0] <> "" And BitAND(WinGetState($list[$i][1]), 2) Then
$wpid = WinGetProcess($list[$i][0])
If $wpid = $pid Then Return $list[$i][0]
EndIf
Next
Return -1
EndFunc ;==>_Process2Win
Didn't work. I also tried this:
Run("C:\path\path\path\PokeMMO.exe")
WinWait("[CLASS:LWJGL]")
Local $sControl = ControlGetFocus("[CLASS:LWJGL]")
MsgBox(0, "ControlGetFocus Example", "The control that has focus is: " & $sControl)
Stystem Message: Java Virtual Machine Launcher - A Java Exception has occured ERROR!
A guide on YouTube tells to install a different version of Java.
Try using Title and text parameter, but leave the controlID parameter free like "" or ''. That should also work. Good luck.

Resources